基于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基础篇
Nov 13 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
jsonp原理及使用
Oct 28 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
Vue.js render方法使用详解
Apr 05 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
Sep 25 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
基于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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python 中if else 语句的作用及示例代码
2018/03/05 Python
python实现Zabbix-API监控
2018/09/17 Python
详解django2中关于时间处理策略
2019/03/06 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python ubplot使用方法解析
2020/01/10 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
当当网软件测试笔试题
2015/11/24 面试题
财务管理专业推荐信
2013/11/19 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
介绍长城的导游词
2015/01/30 职场文书
求职意向书范本
2015/05/11 职场文书
焦点访谈观后感
2015/06/11 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python