这是我用 Javascript 制作的“Dual listbox”(双向选择器)的一个应用示例,是从我的代码中抠出来的。在网页编程中经常会用到。

也许我的实现太烦琐了,希望大家有更好的代码贡献出来。

<html>

<head>

  <title>选择器</title>

  <link href="./style/style.css" rel="stylesheet" type="text/css">

  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">

  <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">

  <script language="javascript">

    function openwin(url, l, t, w ,h)

    {open(url,'','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width='+ w +',height='+ h +',left='+ l +',top='+ t);}

function check_and_submit(frm)

    {

      SelectAll(frm.SelectedItem);

      frm.submit();

    }

  </script>

</head>

<body>

<form name="frm1" id="frm1" method="post" action="save.asp">

<input name="allowsubmit" type="hidden" value="OK">

<table width="500" border="0" cellspacing="0" cellpadding="0" align="center">

  <tr height=10><td colspan=3></td></tr>

  <tr>

    <td width="220" align=center valign="top">

      已分配该用户管理的栏目:<br><br>

      <select name="SelectedItem" id="SelectedItem" size=12 multiple="true">

        <option>无</option>

</select>

      </select>

    </td>

    <td width="60" align=center>

      <br><br>

      <button onClick="MoveSingleItem(WaitSelectItem, SelectedItem)">&lt;</button><br><br>

      <button onClick="MoveAllItems(WaitSelectItem, SelectedItem)">&lt;&lt;</button><br><br><br><br>

      <button onClick="MoveSingleItem(SelectedItem, WaitSelectItem)">&gt;</button><br><br>

      <button onClick="MoveAllItems(SelectedItem, WaitSelectItem)">&gt;&gt;</button><br>

    </td>

    <td width="220" align=center valign="top">

      待分配的栏目:<br><br>

      <select name="WaitSelectItem" size=12 multiple=true>

        <option>师大要闻</option>

        <option>视频新闻</option>

        <option>图片新闻</option>

        <option>专题要闻</option>

        <option>十万个为什么</option>

        <option>代码测试</option>

        <option>www.why100000.com</option>

      </select>

    </td>

  </tr>

</table>

</form>

<script language="javascript">

 function MoveSingleItem(sel_source, sel_dest)

 {

   if (sel_source.selectedIndex==-1)  //源:没有点选任何项目

     return;

if (sel_source.options[0].text=="无") //源:只有“无”项目

     return;

if (sel_dest.options[0].text=="无") //目标:只有“无”项目,则先删除该提示性项目

     sel_dest.options.remove(0);

var SelectedText = sel_source.options[sel_source.selectedIndex].text;

   sel_dest.options.add(new Option(SelectedText));

   sel_source.options.remove(sel_source.selectedIndex);

if (sel_source.options.length==0)  //源:如果删除完所有有用项目,则添加提示项目:“无”

     sel_source.options.add(new Option("无"));

 }

function MoveAllItems(sel_source, sel_dest)

 {

   if (sel_source.options[0].text=="无") //源:只有“无”项目

     return;

if (sel_dest.options[0].text=="无")   //目标:只有“无”项目,则先删除该提示性项目

     sel_dest.options.remove(0);

//首先拷贝所有项目到目标:

   var sel_source_len = sel_source.length;

   for (var j=0; j<sel_source_len; j++)

   {

     var SelectedText = sel_source.options[j].text;

     sel_dest.options.add(new Option(SelectedText));

   }

//然后删除“源”所有项目:

   while ((k=sel_source.length-1)>=0)

   {

     if (sel_source.options[0].text=="无") //源:只有“无”项目

       break;

     sel_source.options.remove(k);

     if (sel_source.options.length==0)  //源:如果删除完所有有用项目,则添加提示项目:“无”

       sel_source.options.add(new Option("无"));

   }

 }

function SelectAll(theSel)  //选中select中全部项目

 { for (i = 0 ;i<theSel.length;i++)

    theSel.options[i].selected = true;

 }

</script>

用 Javascript 实现的“Dual listbox”(双向选择器)的更多相关文章

  1. jquery 双向select控件bootstrap Dual listbox

    http://www.cnblogs.com/hangwei/p/5040866.html       -->jquery 双向select控件bootstrap Dual listboxhtt ...

  2. 前端插件之Bootstrap Dual Listbox使用

    工欲善其事,必先利其器 对于很多非专业前端开发来说写页面是非常痛苦的,借助框架或插件往往能够达到事半功倍的效果,本系列文章会介绍我在运维系统开发过程中用到的那些顺手的前端插件,如果你是想写XX管理系统 ...

  3. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  4. 五十行javascript代码实现简单的双向数据绑定

    五十行javascript代码实现简单的双向数据绑定 Vue框架想必从事前端开发的同学都使用过,它的双向数据绑定机制能给我们带来很大的方便.今天闲着没事,尝试着实现一下双向数据绑定,接下来给大家分享一 ...

  5. Jquery双向select控件Bootstrap Dual Listbox

    效果预览: 一. 下载插件 github地址:https://github.com/istvan-ujjmeszaros/bootstrap-duallistbox 也可以在这个网站中下载:http: ...

  6. JavaScript 数字转汉字+element时间选择器快速选择

    window.CN = { : '一', : '二', : '三', : '四', : '五', : '六', : '七', : '八', : '九', : '零' } window.LEVEL = ...

  7. jQ选择器学习片段(JavaScript 部分对应)

    $()函数在大多的JavaScript类库中都被作为一个选择器函数来使用,在jQuery中就是. $("#id")通过id来获取元素,用来代替document.getElement ...

  8. JavaScript实现简单的双向数据绑定

    什么是双向数据绑定 双向数据绑定简单来说就是UI视图(View)与数据(Model)相互绑定在一起,当数据改变之后相应的UI视图也同步改变.反之,当UI视图改变之后相应的数据也同步改变. 双向数据绑定 ...

  9. 第一百三十九节,JavaScript,封装库--CSS选择器

    JavaScript,封装库--修改元素选择器 就是将构造库函数修改成元素选择器,像css那样,输入#xxx .xxx xxx  (获取指定id下的指定class下的指定标签元素) 修改后的基础库 / ...

随机推荐

  1. hadoop端口使用配置总结(非常好的总结)

    转自http://www.aboutyun.com/thread-7513-1-1.html Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以 ...

  2. 【Unity Shaders】游戏性和画面特效——创建一个老电影式的画面特效

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  3. C++对C的函数拓展 - 占位参数

    函数占位参数 占位参数只有参数类型声明,而没有参数名声明 一般情况下,在函数体内部无法使用占位参数 demo #include <iostream> using namespace std ...

  4. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    : 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...

  5. mysql进阶(二十四)防御SQL注入的方法总结

    防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害极大的攻击形式.虽然危害很大,但是防御却 ...

  6. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  7. 什么是IOC

    什么是IOC         IOC:控制反转,控制权的转移,应用程序本身不负责对象的创建和维护,而是由外部容器负责创建和维护.        DI(依赖注入)是其一种实现方式        目的:创 ...

  8. Ext JS添加子组件的误区

    经常会有人问我,为什么我的Grid不能岁窗口的变得而自动调整.了解后,发现很多人都习惯在渲染子组件的时候将Gird渲染到容器内的一个div里,而这正是问题的所在. 在Ext JS的布局系统中,能控制到 ...

  9. Linux用户配置文件(第二版)

    /etc/passwd文件剖析 文件格式: root:x:0:0:root:/root:/bin/bash 用户名:密码位:UID:GID[缺省组ID]:注释性的描述信息:宿主目录:shell[7部分 ...

  10. rhel6.4 安装nodejs和Mysql DB服务

    rhel6.4 安装nodejs和Mysql DB服务 安装好redhat6.4虚拟机后, 安装软件: # yum install gcc-c++ openssl-devel Loaded plugi ...