基于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
Sep 24 Javascript
基于jquery &amp; json的省市区联动代码
Jun 26 Javascript
js中创建对象的几种方式示例介绍
Jan 26 Javascript
Javascript URI 解析介绍
Mar 15 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
js方法数据验证的简单实例
Sep 17 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
Vue2.0系列之过滤器的使用
Mar 01 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
解决Antd 里面的select 选择框联动触发的问题
Oct 24 Javascript
原生js实现放大镜组件
Jan 22 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天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
python排序方法实例分析
2015/04/30 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
Python调用Redis的示例代码
2020/11/24 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
给公司的建议书范文
2014/05/13 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
党员个人总结范文
2015/02/14 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书