基于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之小练习代码
Oct 12 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
鼠标拖拽移动子窗体的JS实现
Feb 25 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
JavaScript实现瀑布流布局
Jun 28 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
Javascript实现的StopWatch功能示例
Jun 13 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
详解JS WebSocket断开原因和心跳机制
May 07 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
用户的详细注册和判断
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jQuery.each使用详解
2015/07/07 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
vuex的使用步骤
2021/01/06 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python回调函数用法实例详解
2015/07/02 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
读书活动实施方案
2014/03/10 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
导师评语大全
2014/04/26 职场文书
先进员工获奖感言
2014/08/14 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
跑吧孩子观后感
2015/06/10 职场文书
重阳节主题班会
2015/08/17 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python