jquery chosen插件的使用(搜索查询下拉列表,多选)

待我称王封你为后i 2022-05-23 08:00 753阅读 0赞

Chosen

前言:

想要达到下拉框有多选的情况。

过程:

1.因为本次工作项目使用的是surperUI,而它则是基于bootstrap框架搭建而成的。于是自然而然的就想到了使用bootstrap中的select插件。可是因为不太熟悉该框架的使用方法,于是看了一下使用方法,就上手写代码了。知道最终研究细节时,才发现出现了一些问题:

首先,不会取到select的value值;其次,不会回显其值。反复考量之后,才决定摒弃这哥熟知的方法,而选择另外一款方便好用的插件——Jquery chosen。

2.关于Jquery chosen的介绍(https://harvesthq.github.io/chosen/):

Chosen is a jQuery plugin that makes long, unwieldy select boxes much more user-friendly.(chosen是一个jQuery插件:它会使冗长笨重的选择框变得更加的友好。)

因为它有较多是介绍,以及相对比较全面的api,所以使用起来就相当方便。比如:

1)在页面中只需引入相应文件即可:

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

2)在html中创建相应的select元素:

复制代码

  1. ...
  2. <select name="cidt" style="width:150px;" id="cid" class="cid_select" placeholder="请选择">
  3. <option value="1">西安</option>
  4. <option value="">厦门</option>
  5. <option value="3">成都</option>
  6. <option value="4">重庆</option>
  7. <option value="5">南宁</option>
  8. </select>
  9. ...

复制代码

3)然后在script标签中初始化chosen标签:

  1. jQuery(".cid-select").chosen();

——————————————————————————————————————————————

4.关于chosen的一些设置:

1)当搜索不到的时候,更改默认提示语:

  1. //匹配没有结果时的显示文字
  2. $(".cid-select").chosen({
  3. no_results_text:"没有找到",
  4. allow_single_deselect:true
  5. });

2)chosen监听的事件:

a.chosen:update 通过js改变select元素选项时应该触发此事件,以更新chosen生成的选框;

b.chosen:active 相当于HTML 的focus事件(元素获得焦点时候的事件);

c.chosen:open 激活chosen并显示搜索的结果。

***(在对chosen的下拉框做数据初始化或者通过js给下拉框插入option之后都需要更新chosen)

  1. //通过在 <select> 元素上触发特定事件可以调用 Chosen 的监听函数。
  2. // tell Chosen that a select has changed
  3. $('.cid-select').trigger('chosen:updated');

4)chosen触发的事件:

  1. jQuery('.cid-select).on('change',function(e,params){
  2. do_something(e,params);
  3. });

change chosen触发标准的change事件,同时会传递selected or deselected参数,方便用户获取改变的选项;

chosen:ready chosen实例化完成时的触发;

chosen:maxselected 超过max_selected_options设置时触发;

chosen:showing_dropdown chosen下拉选框打开完成时触发;

chosen:hiding_dropdown chosen下拉选框关闭完成时触发;

chosen:no_results 搜索没有匹配时触发

-————————————————————————————————————————————-

5.远程加载数据数据(例):

复制代码

  1. jQuery.ajax({
  2. url: '/information/information/citiesall',//这个url用来获取所有数据l
  3. dataType: "json",
  4. var html ='';
  5. success: function (data) {
  6. jQuery(".cid-select").chosen({maxHeight: 200});
  7. for (var i = 0; i < data.length; i++) {
  8. html+='<option value="'+result[i].id+'">'+result[i].name+'</option>'
  9. }
  10. jQuery(".cid_select").append(html);
  11. }
  12. });

复制代码

6.chosen jQuery在表单提交的时候,会默认将value提交到后台,这样就方便我们进行后续的操作了,但是它本身又存在一个不完美的地方:在自己成功在数据库保存好数据后,再回显的时候,却不知道应该怎样给它来赋值。于是想了很多类似的插件:easyui的赋值方式或者类似于input的赋值,但是均以失败告终,无奈之下,我们只能自己写方法来给它定义赋值的方法,暂且就当做公共方法使用,这样基本上用到的人都能感受到它的便利。以下便是进行封装过的插件,如果再单页面中使用的话,只需要把它代入具体的js中即可。

复制代码

  1. //找到多选标签的对象
  2. chosenSetValues($modal.find('select[name="' + name + '"]'),row[name],option.select_chosen)
  3. //----------------------------------------------
  4. /**
  5. * chosen多选框
  6. * @param $elm
  7. * @param row
  8. * @param option
  9. */
  10. var chosenSetValues=($elm,datas,option={})=>{
  11. option=$.extend({},{width: '370px', no_results_text:'无结果匹配!'},option);
  12. var url=$elm.attr('data_url')||option.url;
  13. if(url){
  14. $.post(url, (result)=> {
  15. _chosenSetValues($elm,result,datas,option)
  16. },'json');
  17. }else{
  18. var tempArr=[];
  19. $elm.children('option').each(function () {
  20. tempArr.push({id:$(this).attr('value'),name:$(this).text()})
  21. });
  22. _chosenSetValues($elm,tempArr,datas,option)
  23. }
  24. };
  25. var _chosenSetValues =($elm,result,datas,option)=>{
  26. var html='';
  27. var flag=false;
  28. $elm.empty();
  29. $elm.chosen("destroy");
  30. if(typeof datas ==='string'){
  31. if(datas.length==0){
  32. datas=[];
  33. }else{
  34. datas =datas.split(',');
  35. }
  36. }
  37. for(var i=0;i<result.length;i++){
  38. for(var j=0;j<datas.length;j++){
  39. if(datas[j]==result[i].id) flag=true;
  40. }
  41. if(flag){
  42. html+="<option value="+result[i].id+" selected >"+result[i].name+"</option>";
  43. flag=false;
  44. }else{
  45. html+="<option value="+result[i].id+">"+result[i].name+"</option>"
  46. }
  47. }
  48. $elm.append(html);
  49. //设置未找到时的显示文字
  50. $elm.chosen(option);
  51. };

复制代码

***:这里,特别提出的一点是:在给下拉框赋值的过程中,

  1. $elm.empty();
  2. $elm.chosen("destroy");

第一种是原生的清空select,第二种则是chosen自带的清空,只有这两种合在一起,才会达到清空原有下拉框值的效果。之前在网上看过很多关于chosen的介绍,关于如何清空下拉框的介绍时,总是欠缺那么一点完美,直到自己开始做的时候,才发现原来这真的有点小纠结,不过还好,最终还是达到了预期的效果。

934768-20170401160516289-408382077.gif

一、Chosen 选项列表


通过参数传递的选项

以下参数在实例化的时候通过参数设置。

  1. $('.my_select_box').chosen({
  2. disable_search_threshold: 10, no_results_text: 'Oops, nothing found!', width: '95%' });














































































选项 默认值 描述
allow_single_deselect false 设置为 true 时非必选的单选框会显示清除选中项图标
disable_search false 设置为 true 隐藏单选框的搜索框
disable_search_threshold 0 少于 n 项时隐藏搜索框
enable_split_word_search true 是否开启分词搜索,默认开启
inherit_select_classes false 是否继承 select 元素的 class,如果设为 true,Chosen 将把 select 的 class 添加到容器上
max_selected_options Infinity 最多选择项数,达到最大限制时会触发 chosen:maxselected 事件
no_results_text “No results match” 没有搜索到匹配项时显示的文字
placeholder_text_multiple “Select Some Options” 多选框没有选中项时显示的占位文字
placeholder_text_single “Select an Option” 单选框没有选中项时显示的占位文字
search_contains false 搜素包含项,默认从第一个字符开始匹配
single_backstroke_delete true 多选框中使用退格键删除选中项目,如果设为 false,第一次按 delete/backspace 会高亮最好一个选中项目,再按会删除该项
width Original select width. Chosen 生成的选择框宽度,默认为和原 select 宽度保持一致
display_disabled_options true 是否显示禁止选择的项目
display_selected_options true 多选框是否在下拉列表中显示已经选中的项

二、属性

可以通过在 <select> 上设置属性传递给 Chosen。

  1. <select class="my_select_box" data-placeholder="Select Your Options"> <option value="1">Option 1</option> <option value="2" selected>Option 2</option> <option value="3" disabled>Option 3</option> </select>



















属性 描述
data-placeholder 占位符文字 
注意: 改属性会覆盖 placeholder_text_multiple 或 placeholder_text_single 选项。
multiple 有此属性的 select 会渲染成可以多选的 Chosen 选框
selected, disabled 设置选中、禁止状态,Chosen 会读取这些属性

三、触发事件

Chosen 会在源 <select> 元素上触发事件。

  1. $('.my_select_box').on('change', function(e, params) { do_something(e, params); });































事件 描述
change Chosen 触发标准的 change 事件,同时会传递 selected or deselected 参数, 方便用户获取改变的选项
chosen:ready Chosen 实例化完成时触发
chosen:maxselected 超过 max_selected_options 设置时触发
chosen:showing_dropdown Chosen 下拉选框打开完成时触发
chosen:hiding_dropdown Chosen 下拉选框关闭完成时触发
chosen:no_results 搜索没有匹配项时触发

注意:所有 Chosen 自定义事件 都包含 Chosen 实例 chosen 对象作为参数。

四、Chosen 监听的事件

通过在 <select> 元素上触发特定事件可以调用 Chosen 的监听函数。

  1. // tell Chosen that a select has changed
  2. $('.my_select_box').trigger('chosen:updated');























事件 描述
chosen:updated 通过 JS 改变 select 元素选项时应该触发此事件,以更新 Chosen 生成的选框
chosen:activate 相当于 HTML focus 事件
chosen:open 激活 Chosen 并显示搜索结果
chosen:close 关闭 Chosen 并隐藏搜索结果

五、几个常规问题及用法

1、当js更新select(改变选中项、添加option等)后,执行以下操作,用来更新chosen选框

  1. $(".chosen-select").trigger("chosen:updated"); //$(".chosen-select")为select元素

2、allow_single_deselect清空选中项 不起作用

select中必须有一个空的option,尤其是动态更新option的情况下,更新前后都要有一个空的option,否则不能正常显示清空图标

来源:https://blog.csdn.net/wangxiuyan0228/article/details/79419937

https://www.cnblogs.com/zhengyeye/p/6628460.html

发表评论

表情:
评论列表 (有 0 条评论,753人围观)

还没有评论,来说两句吧...

相关阅读