`
chaoran
  • 浏览: 24372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

左右列表框内容选择控件

阅读更多

    左右列表框内容选择控件,是一个实际项目中经常要用到的一个控件。

    在网上可以搜索到使用Mootools技术开发的M2MSelector控件,就是一个典型的实现。印象中,网上也有使用ExtJS技术实现的该类控件。可是,在网上搜不到使用jQuery技术实现的该类型的控件。就自己实现一个吧。

    先看一下页面元素有哪些吧,附图如下:


       该控件包含两个可多选的下拉框,左边这个,是所有可选项的列表,右边这个,是所有已选项的列表。

    有六个按钮:全部选中、选中、不选、全部不选、上移和下移。

    点击“全部选中”按钮,则右边的下拉框数据与左边下拉框数据相同,同时,左边下拉框数据全部灰掉。

    点击“选中”按钮,则左边下拉框已选中数据,复制到右边的下拉框,同时,左边下拉框已选中数据灰掉。

    点击“不选”按钮,则删除右边下拉框的选中的数据,左边下拉框的这些数据恢复正常颜色,可以再次被选择。

    点击“全部不选”按钮,则左边下拉框全部内容恢复正常颜色,右边下拉框数据全部删除。

    点击“上移”按钮,则右边下拉框选中数据向上移动;点击“下移”按钮,则右边下拉框选中数据向下移动。

     “选中”按钮的注册代码如下:

 

 $.fn.registerTransferTrigger = function(id, doubleID) {
  $($("#" + id)).bind("change", function(e){
   $('option', $(this)).each(function(i){
    if ($(this).css("color") == '#ccc'){
     $(this).attr("selected", false);
     $(this).attr("disabled", true);
    }
   });
  });
  
  $(this).bind("click", function(e){
   $('option', $("#" + id)).each(function(i){
    if ($(this).attr("selected") && !isExistInSelect($(this).val(), doubleID)){
     document.getElementById(doubleID).add(new Option($(this).text(), $(this).val()));
     $(this).attr("selected", false);
     $(this).attr("disabled", true);
     $(this).css("color", '#ccc');
    }
   });
  });
 };

“不选”按钮的注册代码如下:

 $.fn.registerReturnTrigger = function(id, doubleID) {
  $(this).bind("click", function(e){
   $('option', $("#" + doubleID)).each(function(i){
    if ($(this).attr("selected")){
     var v = $(this).val();
     $(this).remove();
     $('option', $("#" + id)).each(function(i){
      if ($(this).val() == v)
       $(this).css("color", '#000');
       $(this).attr("disabled", false);
     });
     
    }
   });
  });
 };

 

 

“全部选中”按钮的注册代码如下:

 $.fn.registerTransferAllTrigger = function(id, doubleID) {
  $('option', $("#" + doubleID)).each(function(i){
   var v = $(this).val();
   $('option', $("#" + id)).each(function(i){
    if ($(this).val() == v){
     $(this).css("color", '#ccc');
     $(this).attr("disabled", false);
    }
   });
  });
  
  $(this).bind("click", function(e){
   $('option', $("#" + id)).each(function(i){
    if (!isExistInSelect($(this).val(), doubleID)){
     document.getElementById(doubleID).add(new Option($(this).text(), $(this).val()));
     $(this).attr("selected", false);
     $(this).attr("disabled", true);
     $(this).css("color", '#ccc');
    }
   });
  });
 };

 

 

“全部不选”按钮的注册代码如下:

 $.fn.registerReturnAllTrigger = function(id, doubleID) {
  $(this).bind("click", function(e){
   $("#" + doubleID).html("");
   $('option', $("#" + id)).each(function(i){
    $(this).css("color", '#000');
    $(this).attr("disabled", false);
   }); 
  }); 
 };

 

  “上移”按钮的注册代码如下:

 $.fn.createUpSuite = function(sltID) {
  return this.each(function(){
   if ($(this).attr('upSuite')){return;}
   $(this).attr('upSuite', true);
   $(this).bind("click", function(e){
    var oa = new Array();
    $('option', $("#" + sltID)).each(function(i){
     oa[i] = new Array($(this).val(), $(this).text(), $(this).attr("selected"));
    });
    $('option', $("#" + sltID)).each(function(i){
     if (i != 0 && oa[i][2] && !oa[i - 1][2]){
      var v = oa[i - 1][0];
      var t = oa[i - 1][1];
      oa[i - 1] = new Array(oa[i][0], oa[i][1], true);
      oa[i] = new Array(v, t, false);
      
     }
    });
    $("#" + sltID).html("");
    $.each(oa, function(i, n){
     document.getElementById(sltID).add(new Option(oa[i][1], oa[i][0]));
     if (oa[i][2] == true){
      $('option:eq(' + i + ')', $("#" + sltID)).attr("selected", true);
     }
    });
   });
  });
 };

 

 “下移”按钮的注册代码如下:

 $.fn.createDownSuite = function(sltID) {
  return this.each(function(){
   if ($(this).attr('downSuite')){return;}
   $(this).attr('downSuite', true);
   $(this).bind("click", function(e){
    var oa = new Array();
    $('option', $("#" + sltID)).each(function(i){
     oa[i] = new Array($(this).val(), $(this).text(), $(this).attr("selected"));
    });
 
    for( var i=$('option', $("#" + sltID)).length - 2; i >= 0; --i){
     if (oa[i][2] && !oa[i + 1][2]){
      var v = oa[i + 1][0];
      var t = oa[i + 1][1];
      oa[i + 1] = new Array(oa[i][0], oa[i][1], true);
      oa[i] = new Array(v, t, false);
     }
    }
    $("#" + sltID).html("");
    $.each(oa, function(i, n){
     document.getElementById(sltID).add(new Option(oa[i][1], oa[i][0]));
     if (oa[i][2] == true){
      $('option:eq(' + i + ')', $("#" + sltID)).attr("selected", true);
     }
    });
   });
  });
 };

 

   其中使用了一个自定义方法代码如下:

function isExistInSelect(value, selectid){
var is = false;
$("#" + selectid).find('OPTION').each( function() {
   if ($(this).val() == value) {
    is = true;
    return false;
   }
});
return is;
}

 

    我把这个控件做成了struts2的自定义标签,该标签的ftl文件如下:

<div >
<div style="float:left;">
<div style="float:none;" >${parameters.leftTitle}</div>
<div style="float:none;">
<select<#rt/>
name="${parameters.name?default("")?html}"<#rt/>
<#if parameters.id?exists>
id="${parameters.id?html}"<#rt/>
</#if>
<#if parameters.multiple?exists>
multiple="multiple"<#rt/>
</#if>
size="15" style="float:left; width:${parameters.labelwidth?default(130)}; ">

<@s.iterator value="parameters.list">
<#assign itemKey = stack.findValue(parameters.listKey)/>
<#assign itemValue = stack.findString(parameters.listValue)/>
<option value="${itemValue}">${itemKey}</option>
<
/@s.iterator>
</select>
</div>
</div>

    <div style="float:left; margin:0 5; "><br><br><br>
      <input type="button" id="btTransferAll" value="&gt;&gt;" style="cursor:hand; "/>
      <br>
      <input type="button" id="btTransfer" value="&gt;&nbsp;" style="cursor:hand; " />
      <br>
      <input type="button" id="btReturn" value="&lt;&nbsp;" style="cursor:hand; " />
      <br>
      <input type="button" id="btReturnAll" value="&lt;&lt;" style="cursor:hand; " />
     
    </div>
   
<div style="float:left;">
<div style="float:none;" >${parameters.rightTitle}</div>
<div style="float:none;">
<select<#rt/>
name="${parameters.doubleName?default("")?html}"<#rt/>
<#if parameters.doubleID?exists>
id="${parameters.doubleID?html}"<#rt/>
</#if>
<#if parameters.doubleMultiple?exists>
multiple="multiple"<#rt/>
</#if>
size="10" style="float:left; width:${parameters.labelwidth?default(130)};">

<@s.iterator value="parameters.doubleList">
<#assign itemKey = stack.findValue(parameters.doubleListKey)/>
<#assign itemValue = stack.findString(parameters.doubleListValue)/>
<option value="${itemValue}">${itemKey}</option>
<
/@s.iterator>
</select>
</div>
</div>
<br><br><br>
<div style="float:left;">
<img id="MoveUp" src="<@s.url value='/common/img/margin_up.gif' encode='false' includeParams='none'/>" style="cursor:hand; width:24; height:20; "/>
<br>
<img id="MoveDown" src="<@s.url value='/common/img/margin_down.gif' encode='false' includeParams='none'/>" style="cursor:hand; width:24; height:20; "/>
</div>


</div>

<script type="text/javascript">

$(document).ready(function(){
$("#btTransferAll").registerTransferAllTrigger("${parameters.id}", "${parameters.doubleID}");
$("#btTransfer").registerTransferTrigger("${parameters.id}", "${parameters.doubleID}");
$("#btReturn").registerReturnTrigger("${parameters.id}", "${parameters.doubleID}");
$("#btReturnAll").registerReturnAllTrigger("${parameters.id}", "${parameters.doubleID}");

$("#MoveUp").createUpSuite("${parameters.doubleID}");
$("#MoveDown").createDownSuite("${parameters.doubleID}");
});

</script>

  • 大小: 35.4 KB
分享到:
评论

相关推荐

    jQuery左右文字双向列表选择器插件

    左右双列表双向选择框,包含了检索、ctrl多选、shift多选、全选、上下顺序调整。展示效果简介功能齐全

    列表左右选择全选反选插件

    列表左右选择全选反选插件

    一个可以左右交换数据的VB ListBox控件.rar

    一个可以左右交换数据的VB ListBox列表控件,可左中选择列表中的内容,选错了可 删除。

    jQuery双向列表左右移动选择框代码.zip

    有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!

    LabVIEW的列表

    右键单击列表框并从弹出的快捷菜单中选择“选择模式→高亮显示整行”,则选中某一项时,整行内容将以高亮显示,如图2所示。  2.表格 表格可以看成由字符串组成的二维数组,每个单元格可以容纳一个字符串,如图3...

    jquery双列表框插件Bootstrap Dual Listbox

    Bootstrap Dual列表是一个为响应Twitter优化的列表框插件。它可以用在所有的现代浏览器和触摸设备上

    可浮动的左右列选择框

    实现了一个可以进行多选的下拉列表,列表的样式是左边为待选,右边为已选,可以作为插件使用,对input标签初始化,可以根据输入框位置改变而变动。

    jQuery穿梭框左右列表添加删除代码.zip

    有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!

    EDA/PLD中的LabVIEW的列表

    右键单击列表框并从弹出的快捷菜单中选择“选择模式→高亮显示整行”,则选中某一项时,整行内容将以高亮显示,如图2所示。  2.表格 表格可以看成由字符串组成的二维数组,每个单元格可以容纳一个字符串,如图3

    拖动两控件间的分隔线(vc6)

    本代码用于实现两列表框控件或树形控件间的分隔线拖动,来改变左右两边控件的显示大小。经常用于实现windows资源管理器的界面。

    Visual C++ 编程资源大全(源码 控件)

    (3KB)&lt;END&gt;&lt;br&gt;29,ColorBox.zip 这是一个可以以不同颜色显示列表项目的列表框类库(17KB)&lt;END&gt;&lt;br&gt;30,iconpick.zip 一个图标选择的列表框(32KB)&lt;END&gt;&lt;br&gt;31,hexedit.zip 这是一个从Cedit派生的十六进制的...

    jQuery下拉搜索菜单选择插件

    jQuery下拉搜索菜单选择插件是一款jQuery基于bootstrap制作dom面向对象点击下拉框弹出列表菜单和搜索筛选框选择菜单插件。

    TExCell电子表格控件

    22. 单元格内嵌控件(列表框,组合框,日期选择控件,……),目前支持与TdateTimePicker 的互动,计划支持更多控件,计划加入控件属性编辑器,加入控件事件宏功能(2000/12/13)23. 单元格绝对引用和相对引用的区分...

    JavaScript_JQuery_CSS_CSS_DIV漂亮的实例123个

    114. 第二款jQuery左右移动图片+内容展示插件代码 115. 简单jQuery实现产品图片自动左右滚动插件下载 116. 编辑推荐jQuery超帅模拟图片翻页的展示Flash特效效果 117. 适合网站内容推广淡入淡出特效的jQuery焦点图...

    Qt自绘控件

    圆形拱形指示仪、圆形仪表、左右滑块、线型刻度尺、圆形刻度尺、酷炫进度条电池指示仪、垂直方块...图表曲线显示、滑动背景面板、滑动列表框、另类进度条、LED数字灯、声音波形动态图、声音直方动态图、对称直方动态图

    El Inputte for .NET---最新标准的输入界面控件

    对格式控件可以用鼠标选择文字列表中的内容。 用Dropdown输入框辅助输入 日历和计算器控件提供能够客户定制的外观和功能的Dropdown输入框 调整表示位置 box的高度具有自动设置功能;能够根据其它控件的大小自动...

    VB编程资源大全(控件 窗体1)

    gcjrfm,exe 改良 VB 的 Frame 控件(125KB) 20,hsoft11,zip 包含两个 IE 工具栏和 Office 列表框的小控件(73KB) 21,ledbag6.exe 专业的 LED 控件(317KB) 22,wizardx6.exe 专业的向导控件...

    VB编程资源大全(控件 窗体2)

    gcjrfm,exe 改良 VB 的 Frame 控件(125KB) 20,hsoft11,zip 包含两个 IE 工具栏和 Office 列表框的小控件(73KB) 21,ledbag6.exe 专业的 LED 控件(317KB) 22,wizardx6.exe 专业的向导控件...

    TExCell电子表格控件源代码

    22. 单元格内嵌控件(列表框,组合框,日期选择控件,……),目前支持与TdateTimePicker 的互动,计划支持更多控件,计划加入控件属性编辑器,加入控件事件宏功能(2000/12/13) 23. 单元格绝对引用和相对引用...

Global site tag (gtag.js) - Google Analytics