`
wh8766
  • 浏览: 35621 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jQuery多选列表的改进

阅读更多
IE自带的select控件实在不好看..

这里改造了Ethan Miller的一个基于jQuery 的 Simple Multi-Select, 让其能重新构建, 这样便可以在不断变化的多选select中使用了.
目前这里有个小问题,列表在IE6下会出现click错误.考虑了一下,还是使用change来代替click事件.还未能查到是否为jQuery在IE6下兼容问题.

/* jQuery Simple Multi-Select plugin 0.9
 *
 * Copyright (c) 2009 Ethan Miller
 * http://ethanmiller.name/notes/jquery_simplemultiselect/
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 */

(function($){
 	$.fn.extend({
		simpleMultiSelect : function(options){
			settings = $.extend({
				highlight : '#CCE',
				border : '#777',
				width : 350,
				height : 150}, options);
			var select = this;
			return this.each(function(){
				// wrapping select in a div so that the select and pseudo select 
				// will be siblings
				$(this).wrap('<div class="sms-container"></div>');
				var divselect = $('<div class="sms-pseudo-select"></div>');
				$('option', this).each(function(){
					var op = $(this);
					var dv = $('<div/>').data('v', op.val()).text(op.text());
					dv.css({"cursor" : "pointer", "border-bottom" : "1px solid #ABB3DE"});
					if(op.attr('selected')){
						// highlight pseudo option on load
						dv.css({'background-color' : settings.highlight, "font-weight" : "bold"});
					}
					dv.click(function(){
						// we still have references to op and dv here ...
						if(op.attr('selected')){
							//de-select
							op.removeAttr('selected');
							dv.css({'background-color' : 'transparent', "font-weight" : "normal"});
						}else{
							//select
							op.attr('selected', true);
							dv.css({'background-color' : settings.highlight, "font-weight" : "bold"});
						}
						select.click();		//IE6在这里会出现问题
					});
					divselect.append(dv);
				});
				divselect.css({
					width : settings.width,
					height : settings.height,
					cursor : "default",
					overflow : "auto",
					border : "1px solid " + settings.border});
				$(this).after(divselect).hide();
			});
//			return this;
		},
		//如果实体Select发生变化,需要rebuilt一下
		rebuilt : function(){
			var select = this;
			return this.each(function(){
				// wrapping select in a div so that the select and pseudo select 
				// will be siblings
				select.parent().find(".sms-pseudo-select").remove();
				var divselect = $('<div class=\"sms-pseudo-select\"></div>');
				$('option', this).each(function(){
					var op = $(this);
					var dv = $('<div/>').data('v', op.val()).text(op.text());
					dv.css({"cursor" : "pointer", "border-bottom" : "1px solid #ABB3DE"});
					if(op.attr('selected')){
						// highlight pseudo option on load
						dv.css({'background-color' : settings.highlight , "font-weight" : "bold"});
					}
					dv.click(function(){
						// we still have references to op and dv here ...
						if(op.attr('selected')){
							//de-select
							op.removeAttr('selected');
							dv.css({'background-color' : 'transparent', "font-weight" : "normal"});
						}else{
							//select
							op.attr('selected', true);
							dv.css({'background-color' : settings.highlight, "font-weight" : "bold"});
						}
						select.change();
					});
					divselect.append(dv);
				});
				divselect.css({
					width : settings.width,
					height : settings.height,
					cursor : "default",
					overflow : "auto",
					border : "1px solid " + settings.border});
				$(this).after(divselect).hide();
			});
//			return this;
		},
		smsNone : function(){
			return this.each(function(){
				siblingDivSet(this).each(function(){
					var psop = $(this);
					if(psop.css('background-color') != 'transparent'){
						psop.click();
					}
				});
			});
		},
		smsAll : function(){
			return this.each(function(){
				siblingDivSet(this).each(function(){
					var psop = $(this);
					if(psop.css('background-color') == 'transparent'){
						psop.click();
					}
				});
			});
		}
	});
	function siblingDivSet(sel){
		// expects a select object, return jquery set
		return $(sel).siblings('div.sms-pseudo-select').children('div');
	}
})(jQuery);


使用时加载, 页面运行时需要重建select的话也是如下:
$("#yearSelector").simpleMultiSelect({
		highlight : '#BFDAEB',
		border : '#7f9db9',
		width : 125,
		height : 80
	});
//重建
$("#yearSelector").rebuilt();
//全选
$("#yearSelector").smsAll();
//反选
$("#yearSelector").smsNone();


效果图如下:



  • 大小: 18.7 KB
分享到:
评论

相关推荐

    可以放到项目中用 多选下拉列表 复选下拉列表 jquery多选列表 多选多级联动下拉列表,有demo

    这可能是另一个版本或变体的jQuery多选插件,可能包含2017年的更新和改进。这个插件可能提供新的特性,如优化的性能、更好的浏览器兼容性或新增的API方法。 6. **Demo**: 提供的"demo"示例文件是了解和测试插件...

    jQuery MultiSelect 美化增强的多选下拉框.rar

    jQuery MultiSelect 是一个基于jQuery的插件,它的主要目标是通过提供自定义样式和增强功能,来改进原生的多选下拉框用户体验。这个插件不仅提供了美观的界面,还允许用户进行多项选择,同时具备搜索过滤功能,使得...

    jQuery多选下拉菜单

    总结来说,创建一个jQuery多选下拉菜单涉及到HTML结构的设置、CSS样式的设计、jQuery库的使用以及可能的Ajax交互。通过合理利用现有的工具和库,我们可以构建出功能强大、交互友好的多选下拉菜单,提升用户的使用...

    jQuery单选多选按钮样式美化代码.zip

    这个"jQuery单选多选按钮样式美化代码.zip"文件提供了对单选按钮和多选按钮的视觉样式改进的解决方案,特别适合那些希望提升网站或应用界面美观度的开发者。 首先,让我们深入了解一下jQuery。jQuery是由John Resig...

    jQuery带过滤功能列表分类筛选插件代码

    5. **优化和扩展**:根据需求,我们可以进一步优化代码,如添加多选筛选、搜索功能或改进用户体验。同时,`assets`文件夹可能包含图片和其他媒体资源,用于美化筛选按钮或列表项。 **四、实际应用** 这个插件适用于...

    jQuery模拟select下拉框多选和单选插件

    总之,这款jQuery模拟select下拉框多选和单选插件是网页开发中的一个实用工具,它通过良好的视觉设计和用户体验改进,提高了网页的交互性和专业性。在实际项目中,开发者可以根据需求对其进行配置和扩展,以满足各种...

    jquery 列表双向选择器之改进版

    在改进后的双向选择器中,作者加入了shift多选的功能,让用户在选择列表项时可以更加方便快捷。 知识点3:Jquery Jquery是一个快速、简洁的JavaScript库,它封装了许多常用的JavaScript操作,极大地简化了...

    jquery实现用户信息左右选择特效

    本项目"jquery实现用户信息左右选择特效"是基于jQuery构建的一个交互式用户信息管理功能,它优化了传统的多选列表,提供了一种更加直观和动态的方式来处理用户数据。 首先,我们要理解这个项目的背景。传统的多选...

    下拉列表多选2

    "下拉列表多选2"可能是指一个特定版本或改进的实现,可能是针对性能、易用性或兼容性的优化。 `MultiDropDown-v2` 这个名称暗示我们可能正在处理一个升级版的多选下拉组件,可能是第二版(v2)的更新。这个组件可能...

    织梦多选功能修改

    本主题聚焦于“织梦多选功能修改”,这是一个关于如何增强织梦列表页筛选功能的技术点,特别是涉及多选筛选选项的优化。下面我们将深入探讨这个主题,解析相关代码实现,并给出可能的改进策略。 1. **织梦列表页...

    jquery多选框

    6. `连接地址.txt`:这可能是一份链接列表,指向获取更多jQuery多选框插件资源、文档或者示例的网址。 要使用这些文件,首先需要在网页中引入jQuery库(如果还没有的话),然后加载jQuery UI(如果使用了其样式)和...

    jquery select列表选择框选中美化效果.zip

    jQuery插件如“Select2”,“Chosen”,“Bootstrap Select”等,提供了丰富的功能和美观的设计,使得`&lt;select&gt;`元素可以有搜索、多选、自定义样式等多种特性。这些插件通常通过JavaScript和CSS来增强原始的HTML元素...

    chosen(下拉框多选)

    最后,在页面加载完成后,使用jQuery的`$(document).ready`函数来初始化Chosen,这样`&lt;select&gt;`元素就被转换成了可多选、带搜索功能的下拉框。 Chosen库还提供了丰富的配置选项和API,可以自定义其行为,例如设置...

    select2(jquery)插件下载

    Select2是一款基于jQuery的增强型下拉选择框插件,它极大地改进了原生HTML `&lt;select&gt;` 元素的用户体验和功能。标题中的"select2(jquery)插件下载"指的是这个插件的获取途径,通常通过下载压缩包文件来获取并应用于...

    jquery实现下拉框多选方法介绍

    在本文中,我们看到一个具体的例子,作者在原有的Combotree基础上改进了样式,使其更适合多选需求。 在HTML部分,我们注意到引入了EasyUI的相关CSS和JavaScript文件,包括`easyui.css`、`jquery.min.js`和`jquery....

    jQuery下拉框多选

    为了改进用户体验,开发者通常会使用jQuery插件,如Chosen、Select2或Multiselect等。这些插件提供了更美观的界面和更友好的交互方式。 以Chosen为例,首先需要在页面中引入jQuery库和Chosen插件的CSS及JS文件。...

    html弹出窗体内涵单选,多选,分页

    开源项目的好处在于开发者可以查看和修改源代码,根据需求进行定制,也可以向社区贡献改进,共同完善项目。 综上所述,"html弹出窗体内涵单选,多选,分页"涉及了HTML基础元素、用户交互设计和前端开发技术。在实际...

    jQuery 3.2.1 下载包

    - 更新了 `.val()` 方法,以便更好地处理多选表单元素。 - 增强了 `.attr()` 方法对于 SVG 属性的支持。 - **注意事项**: - jQuery 3.2.1 不支持 IE8 及以下版本的浏览器。 - 如果项目中仍然使用了这些旧版本...

    JQuery-UI-1.8.16

    相较于早期版本,它可能包含了更多的修复和改进,确保了组件的兼容性和稳定性。 **四、目录结构解析** - **index.html**:示例文件,通常包含了对 jQuery UI 组件的演示和测试,帮助开发者了解如何使用各种组件。 ...

Global site tag (gtag.js) - Google Analytics