基于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 相关文章推荐
[原创]网络复制内容时常用的正则+editplus
Nov 30 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
微信小程序实现图片预加载组件
Jan 18 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
利用babel将es6语法转es5的简单示例
Dec 01 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
基于JS实现数字动态变化显示效果附源码
Jul 18 Javascript
package.json配置文件构成详解
Aug 27 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
PHP MSSQL 存储过程的方法
2008/12/24 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python简单日志处理类分享
2015/02/14 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
遗传算法python版
2018/03/19 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
英国天然宝石首饰购买网站:Gemondo Jewellery
2018/10/23 全球购物
上课睡觉检讨书
2014/01/28 职场文书
会计专业自我鉴定
2014/02/10 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
sql server 累计求和实现代码
2022/02/28 SQL Server
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript