Chosen 是一个支持jquery的select下拉框美化插件,它能让丑陋的、很长的select选择框变的更好看、更方便。不仅如此,它更扩展了select,增加了自动筛选的功能。它可对列表进行分组,同时也可禁用某些选择项。

先来看下插件的效果:

 

跟这个比起来,原来的select样式是不是弱爆了!

马上来武装我们的select吧:

1、先把js和css文件引用到网页里面去:

  1. <link href="js/jqueryUI/chosen/chosen.css" type="text/css" rel="stylesheet" />
  2. <script type="text/javascript" src="js/jquery.1.4.4.min.js"></script>
  3. <script type="text/javascript" src="js/jqueryUI/chosen/chosen.jquery.js"></script>

2、创建一个select元素,如下:

  1. <select name="dept" style="width: 150px;" id="dept" class="dept_select">
  2. <option value="部门1">部门1</option>
  3. <option value="部门2">部门2</option>
  4. <option value="部门3">部门3</option>
  5. <option value="部门4">部门4</option>
  6. <option value="部门5">部门5</option>
  7. </select>

3、然后在js中调用Chosen定义的方法:

  1. $(function(){
  2. $('.dept_select').chosen();
  3. });

4、搞定收工,屌丝立马变成高富帅有木有~

chosen插件的一些设置项:

1、默认文字选项

你可以在select元素上添加data-placeholder属性定义默认文字,也就是在没有选择选项的情况下,显示的文字。

  1. <select data-placeholder="选择部门" style="width:150px;" class="dept_select">
  2. <option value="-1"></option>
  3. <option value="部门1">部门1</option>
  4. <option value="部门2">部门2</option>
  5. <option value="部门3">部门3</option>
  6. <option value="部门4">部门4</option>
  7. <option value="部门5">部门5</option>
  8. </select>

这里还要注意一点,要想显示出默认文字,select下的第一个选择项必须为空的option。

2、对其方式
选项文字默认是左对齐的,可以在class属性中加入“chzn-rtl”来设置右对齐:

  1. <select data-placeholder="选择部门" class="dept_select chzn-rtl" style="width:150px;">

3、JS参数设置

在调用chosen()方法时,我们可以设置一些参数:

选项 描述
no_results_text 无搜索结果显示的文本
allow_single_deselect 是否允许取消选择
max_selected_options 当select为多选时,最多选择个数
  1. $(".some_select").chosen({
  2. /*max_selected_options: 2,*/
  3. no_results_text: "没有找到",
  4. allow_single_deselect: true
  5. });

4、事件

a) change事件:

  1. $(".dept-select").chosen().change(function(){
  2. //do something...
  3. });

b) 当我们需要动态更新select下的选择项时,该怎么办呢?只要在更新选择项后触发Chosen中的liszt:updated事件就可以了:

  1. //...$(".dept-select").html('...<option>部门6</option>...');
  2. $(".dept-select").trigger("liszt:updated");

其他问题:

1、如果不想要搜索框的话,很简单,用css把它隐藏掉就OK了:

  1. .chzn-container-single .chzn-search {
  2. display: none;
  3. }

2、做为天朝的程序猿,不得不考虑ie6和ie7下的情况。好吧,用ie6打开一看,select还是一副屌丝样!

翻看chosen.jquery.js发现在chosen方法中有如下一段,ie6和ie7直接返回select对象本身:

  1. if ($.browser.msie && ($.browser.version === "6.0" || ($.browser.version === "7.0" && document.documentMode === 7))) {
  2. return this;
  3. }

把这段js注释掉,重新打开ie6和7,不再屌丝了有木有!虽然箭头图片和搜索图片不透明不和谐(用js处理下就和谐了)。。。

终于能高高兴兴地在ie6使用了,尼玛过了会又发现问题了,还是坑爹的ie6和7!如果2个select在一起又不和谐了,请看:

点开选择部门,尼玛这是闹哪样!见图:

好吧,这应该是z-index的问题,把css修改下,结果各种div各种z-index改到吐血还是这副死样子。

最后没办法了,想了个笨办法,动态改变所有chzn-container的z-index,在点击select的时候让当前container的z-index最高,让其他select的chzn-container的z-index变低。在chosen.jquery.js中找到此方法:

  1. Chosen.prototype.activate_field = function() {
  2. this.container.addClass("chzn-container-active");
  3. this.active_field = true;
  4. this.search_field.val(this.search_field.val());
  5. return this.search_field.focus();
  6. };

将此方法改为:

  1. Chosen.prototype.activate_field = function() {
  2. this.container.addClass("chzn-container-active");
  3. this.active_field = true;
  4. this.search_field.val(this.search_field.val());
  5. var zindex = 1010;
  6. this.container.css('z-index','1010')
  7. $('.chzn-container').not(this.container).css('z-index',--zindex);
  8. return this.search_field.focus();
  9. };

当然,你也可以在生成.chzn-container的时候按顺序赋予不同的z-index,这样就可以不用每次点击select都要重新设一遍了。

至此,ie6和ie7下使用Chosen基本没什么问题了。。。

[jQueryUI] – Chosen:select下拉选择框美化插件及问题的更多相关文章

  1. jquery.chosen.js下拉选择框美化插件项目实例

    由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...

  2. CSS自定义select下拉选择框(不用其他标签模拟)

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  3. 类似select下拉选择框同时又支持手动输入的元素 datalist 介绍。

    有时候我们会有这样的需求,通过使用下拉菜单给用户一定的选择范围,同时又可以使用户在找不到选择项的时候手动输入.这个时候我们就需要用到html5的datalist属性了. datalist包含<o ...

  4. jsp页面数据回显(select下拉选择框)

    1.静态变量方式: <!-- 实现select标签回显 --> 1.<select name="curStatus" value="${curStatu ...

  5. layui下拉选择框select不显示

    弹层layer下拉框没有样式_不可点击_没有效果_渲染失效的解决办法 一.必须给表单体系所在的父元素加上 class="layui-form" 在一个容器中设定 class=&qu ...

  6. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  7. HTML、CSS小知识--兼容IE的下拉选择框select

    HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...

  8. Bootstrap系列 -- 15. 下拉选择框select

    Bootstrap框架中的下拉选择框使用和原始的一致,多行选择设置multiple属性的值为multiple.Bootstrap框架会为这些元素提供统一的样式风格 <form role=&quo ...

  9. Bootstrap 表单控件一(单行输入框input,下拉选择框select ,文本域textarea)

    单行输入框,常见的文本输入框,也就是input的type属性值为text.在Bootstrap中使用input时也必须添加type类型,如果没有指定type类型,将无法得到正确的样式,因为Bootst ...

随机推荐

  1. Java动态绑定的内部实现机制

     JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法.相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动 ...

  2. position:fixed 居中问题

    设置Css属性position:fixed后如何使这个盒子居中呢?其实也很简单: 就是需要设置给这个div盒子设置属性: left:0; right:0; margin:0 auto; ******* ...

  3. Visual Studio中使用Git Flow

    在VS下使用 GitFlow管理项目开发 1.右键将你的解决方案添加到源代码管理,如果你的VS没有安装git,会提示安装,安装完成之后,在团队资源管理可以看到如下界面 (图一) 2.安装gitflow ...

  4. 把luasocket集成到c++中

    建一个项目pro_test,创建一个运行目录test: 把luasocket/src文件夹中的*.lua拷贝到test/src文件夹中: 把socket.dll,mime.dll,lua5.1.dll ...

  5. hdu_5705_Clock("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5705 题意:给你一个时间和一个角度,问你下一个时针和分针形成给出的角度是什么时候 题解:我们可以将这个 ...

  6. Autofac 组件、服务、自动装配(2)

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  7. MinGW 运行C++程序的方法

    1:安装好 MinGW 及 GCC 编译器后 , 当然 MinGW 全安装最保险了,不会太费劲 2:配置环境变量(注:可能需要重启后生效) 计算机 --> 属性 --> 高级系统设置 -- ...

  8. 循环ip段 转载 出处不明

    public struct IP         {             public byte A;             public byte B;             public  ...

  9. 聊一聊PV和并发、以及计算web服务器的数量的方法【转】

    聊一聊PV和并发.以及计算web服务器的数量的方法 站长之家 2016-08-17 09:40 最近和几个朋友,聊到并发和服务器的压力问题.很多朋友,不知道该怎么去计算并发?部署多少台服务器才合适? ...

  10. 解决Sublime Text 3中文显示乱码(tab中文方块)问题,sublime tab乱码

    一.文本出现中文乱码问题 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: import urllib.requ ...