基于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 相关文章推荐
9个javascript语法高亮插件 推荐
Jul 18 Javascript
将string解析为json的几种方式小结
Nov 11 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
jQuery控制cookie过期时间的方法
Apr 07 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
浅谈JavaScript变量的自动转换和语句
Jun 12 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
Nov 22 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
微信小程序动态增加按钮组件
Sep 14 Javascript
原生JavaScript实现换肤
Feb 19 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php中动态变量用法实例
2015/06/10 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
webpack入门必知必会
2017/01/16 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python绘制简单折线图代码示例
2017/12/19 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
门卫岗位安全职责
2013/12/13 职场文书
八年级英语教学反思
2014/01/09 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
家长会主持词
2014/03/26 职场文书
个人承诺书
2014/03/26 职场文书
公司慰问信范文
2015/03/23 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python