基于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 相关文章推荐
Extjs学习笔记之九 数据模型(上)
Jan 11 Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 Javascript
div层的移动及性能优化
Nov 16 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
Dec 02 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
基于JavaScript实现文字超出部分隐藏
Feb 29 Javascript
JS控制TreeView的结点选择
Nov 11 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
如何更好的编写js async函数
May 13 Javascript
详解微信小程序缓存--缓存时效性
May 02 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 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/02/27 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
给ECShop添加最新评论
2015/01/07 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
学习vue.js计算属性
2016/12/03 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
vue组件与复用详解
2018/04/08 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
python使用tornado实现登录和登出
2018/07/28 Python
Django框架表单操作实例分析
2019/11/04 Python
python中常见错误及解决方法
2020/06/21 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
应届生骨科医生求职信
2013/10/31 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
金融事务专业求职信
2014/04/25 职场文书
求职意向书
2014/07/29 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
事业单位考察材料范文
2014/12/25 职场文书
钱学森电影观后感
2015/06/04 职场文书
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers