基于jquery的可多选的下拉列表框


Posted in Javascript onJuly 20, 2012

同事在网上的找的下拉列表框出现位置不对的和加载慢的BUG,反正多选下拉列表框实现也很简单,与其看那些结构混乱的代码,不如自己重新实现一个。

先看效果: http://demo.3water.com/js/2012/jquery_demo/jquery_select.html

JS:

(function ($) { 
$.fn.extend({ 
MultDropList: function (options) { 
var op = $.extend({ wraperClass: "wraper", width: "150px", height: "200px", data: "", selected: "" }, options); 
return this.each(function () { 
var $this = $(this); //指向TextBox 
var $hf = $(this).next(); //指向隐藏控件存 
var conSelector = "#" + $this.attr("id") + ",#" + $hf.attr("id"); 
var $wraper = $(conSelector).wrapAll("<div><div></div></div>").parent().parent().addClass(op.wraperClass); 
var $list = $('<div class="list"></div>').appendTo($wraper); 
$list.css({ "width": op.width, "height": op.height }); 
//控制弹出页面的显示与隐藏 
$this.click(function (e) { 
$list.toggle(); 
e.stopPropagation(); 
}); 
$(document).click(function () { 
$list.hide(); 
}); 
$list.filter("*").click(function (e) { 
e.stopPropagation(); 
}); 
//加载默认数据 
$list.append('<ul><li><input type="checkbox" class="selectAll" value="" /><span>全部</span></li></ul>'); 
var $ul = $list.find("ul"); 
//加载json数据 
var listArr = op.data.split("|"); 
var jsonData; 
for (var i = 0; i < listArr.length; i++) { 
jsonData = eval("(" + listArr[i] + ")"); 
$ul.append('<li><input type="checkbox" value="' + jsonData.k + '" /><span>' + jsonData.v + '</span></li>'); 
} 
//加载勾选项 
var seledArr; 
if (op.selected.length > 0) { 
seledArr = selected.split(","); 
} 
else { 
seledArr = $hf.val().split(","); 
} 
$.each(seledArr, function (index) { 
$("li input[value='" + seledArr[index] + "']", $ul).attr("checked", "checked"); 
var vArr = new Array(); 
$("input[class!='selectAll']:checked", $ul).each(function (index) { 
vArr[index] = $(this).next().text(); 
}); 
$this.val(vArr.join(",")); 
}); 
//全部选择或全不选 
$("li:first input", $ul).click(function () { 
if ($(this).attr("checked")) { 
$("li input", $ul).attr("checked", "checked"); 
} 
else { 
$("li input", $ul).removeAttr("checked"); 
} 
}); 
//点击其它复选框时,更新隐藏控件值,文本框的值 
$("input", $ul).click(function () { 
var kArr = new Array(); 
var vArr = new Array(); 
$("input[class!='selectAll']:checked", $ul).each(function (index) { 
kArr[index] = $(this).val(); 
vArr[index] = $(this).next().text(); 
}); 
$hf.val(kArr.join(",")); 
$this.val(vArr.join(",")); 
}); 
}); 
} 
}); 
})(jQuery); 
$(document).ready(function () { 
$("#txtTest").MultDropList({ data: $("#hfddlList").val() }); 
}); 
</script>

CSS:
.wraper 
{ 
position: relative; 
} 
.list 
{ 
width: 200px; 
height: 200px; 
overflow: auto; 
position: absolute; 
border: 1px solid #617775; 
display: none; 
background: none repeat scroll 0 0 #F0F6E4; 
float: left; 
} 
.list ul li 
{ 
padding-left: 10px; 
padding-top: 2px; 
padding-bottom: 2px; 
border-top: 1px solid black; 
} 
ul 
{ 
list-style:none outside none; 
}

HTML:
<asp:HiddenField ID="hfddlList" runat="server" Value='{k:1,v:"南京"}|{k:2,v:"上海"}|{k:3,v:"扬州"}|{k:4,v:"苏州"}|{k:5,v:"无锡"}|{k:6,v:"常州"}|{k:7,v:"盐城"}|{k:8,v:"徐州"}|{k:9,v:"泰州"}|{k:10,v:"淮安"}' /> 
<div class="testContainer"> 
<br /> 
<br /> 
<br /> 
<br /> 
<div style="margin-left: 300px; height: 30px;"> 
<asp:TextBox ID="txtTest" runat="server" Width="150px"></asp:TextBox> 
<asp:HiddenField ID="hfTest" runat="server" Value="3,5" /> 
</div> 
</div>
Javascript 相关文章推荐
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
Dec 20 Javascript
js有序数组的连接问题
Oct 01 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
常用javascript表单验证汇总
Jul 20 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
AngularJS 表达式详解及实例代码
Sep 14 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 #Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
Jul 20 #Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 #Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 #Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 #Javascript
基于jQuery的获取标签名的代码
Jul 16 #Javascript
写自已的js类库需要的核心代码
Jul 16 #Javascript
You might like
php实现读取手机客户端浏览器的类
2015/01/09 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python实现Zabbix-API监控
2018/09/17 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
毕业生自荐书
2014/02/02 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
询价采购方案
2014/06/09 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Redis主从复制操作和配置详情
2022/09/23 Redis
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技