基于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 相关文章推荐
JavaScript 密码强度判断代码
Sep 05 Javascript
js实现弹窗插件功能实例代码分享
Dec 12 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
JQuery日历插件My97DatePicker日期范围限制
Jan 20 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
select获取下拉框的值 下拉框默认选中方法
Feb 28 Javascript
vue 路由嵌套高亮问题的解决方法
May 17 Javascript
浅谈vue引用静态资源需要注意的事项
Sep 28 Javascript
浅析Vue 中的 render 函数
Feb 28 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php强制下载类型的实现代码
2011/04/21 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
js单例模式的两种方案
2013/10/22 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python无序链表删除重复项的方法
2020/01/17 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
竞聘上岗演讲稿
2014/05/16 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
大二学年个人总结
2015/03/03 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
领导干部学习心得体会
2016/01/23 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书