左右列表框内容选择控件,是一个实际项目中经常要用到的一个控件。
在网上可以搜索到使用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=">>" style="cursor:hand; "/>
<br>
<input type="button" id="btTransfer" value="> " style="cursor:hand; " />
<br>
<input type="button" id="btReturn" value="< " style="cursor:hand; " />
<br>
<input type="button" id="btReturnAll" value="<<" 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
分享到:
相关推荐
左右双列表双向选择框,包含了检索、ctrl多选、shift多选、全选、上下顺序调整。展示效果简介功能齐全
列表左右选择全选反选插件
一个可以左右交换数据的VB ListBox列表控件,可左中选择列表中的内容,选错了可 删除。
有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!
右键单击列表框并从弹出的快捷菜单中选择“选择模式→高亮显示整行”,则选中某一项时,整行内容将以高亮显示,如图2所示。 2.表格 表格可以看成由字符串组成的二维数组,每个单元格可以容纳一个字符串,如图3...
Bootstrap Dual列表是一个为响应Twitter优化的列表框插件。它可以用在所有的现代浏览器和触摸设备上
实现了一个可以进行多选的下拉列表,列表的样式是左边为待选,右边为已选,可以作为插件使用,对input标签初始化,可以根据输入框位置改变而变动。
有兴趣刚需的可以自己下载,非常实用的jquery代码,可以完美运行,有能力的还可以二次修改!
右键单击列表框并从弹出的快捷菜单中选择“选择模式→高亮显示整行”,则选中某一项时,整行内容将以高亮显示,如图2所示。 2.表格 表格可以看成由字符串组成的二维数组,每个单元格可以容纳一个字符串,如图3
本代码用于实现两列表框控件或树形控件间的分隔线拖动,来改变左右两边控件的显示大小。经常用于实现windows资源管理器的界面。
(3KB)<END><br>29,ColorBox.zip 这是一个可以以不同颜色显示列表项目的列表框类库(17KB)<END><br>30,iconpick.zip 一个图标选择的列表框(32KB)<END><br>31,hexedit.zip 这是一个从Cedit派生的十六进制的...
jQuery下拉搜索菜单选择插件是一款jQuery基于bootstrap制作dom面向对象点击下拉框弹出列表菜单和搜索筛选框选择菜单插件。
22. 单元格内嵌控件(列表框,组合框,日期选择控件,……),目前支持与TdateTimePicker 的互动,计划支持更多控件,计划加入控件属性编辑器,加入控件事件宏功能(2000/12/13)23. 单元格绝对引用和相对引用的区分...
114. 第二款jQuery左右移动图片+内容展示插件代码 115. 简单jQuery实现产品图片自动左右滚动插件下载 116. 编辑推荐jQuery超帅模拟图片翻页的展示Flash特效效果 117. 适合网站内容推广淡入淡出特效的jQuery焦点图...
圆形拱形指示仪、圆形仪表、左右滑块、线型刻度尺、圆形刻度尺、酷炫进度条电池指示仪、垂直方块...图表曲线显示、滑动背景面板、滑动列表框、另类进度条、LED数字灯、声音波形动态图、声音直方动态图、对称直方动态图
对格式控件可以用鼠标选择文字列表中的内容。 用Dropdown输入框辅助输入 日历和计算器控件提供能够客户定制的外观和功能的Dropdown输入框 调整表示位置 box的高度具有自动设置功能;能够根据其它控件的大小自动...
gcjrfm,exe 改良 VB 的 Frame 控件(125KB) 20,hsoft11,zip 包含两个 IE 工具栏和 Office 列表框的小控件(73KB) 21,ledbag6.exe 专业的 LED 控件(317KB) 22,wizardx6.exe 专业的向导控件...
gcjrfm,exe 改良 VB 的 Frame 控件(125KB) 20,hsoft11,zip 包含两个 IE 工具栏和 Office 列表框的小控件(73KB) 21,ledbag6.exe 专业的 LED 控件(317KB) 22,wizardx6.exe 专业的向导控件...
22. 单元格内嵌控件(列表框,组合框,日期选择控件,……),目前支持与TdateTimePicker 的互动,计划支持更多控件,计划加入控件属性编辑器,加入控件事件宏功能(2000/12/13) 23. 单元格绝对引用和相对引用...