下拉多选框bootstrap-multiselect教程

转自http://donald-draper.iteye.com/blog/2373860

bootstrap-multiselect:https://github.com/davidstutz/bootstrap-multiselect 

bootstrap-multiselect doc: http://davidstutz.github.io/bootstrap-multiselect/  
项目中要用到下拉多选框,搜了一下,感觉bootstrap-multiselect,不错,今天来简单介绍一下: 
测试页面: 
Java代码   收藏代码
  1. <html lang="en">  
  2. <head>  
  3. <meta charset="utf-8" />  
  4. <!--注意这里jquery的版本和css,js引入的顺序 -->  
  5. <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css" type="text/css"/>  
  6. <script type="text/javascript" src="./jquery/js/jquery-1.9.1.min.js"></script>  
  7. <script type="text/javascript" src="./bootstrap/js/bootstrap.min.js"></script>  
  8.    
  9. <!-- Include the plugin's CSS and JS: -->  
  10. <!-- <script type="text/javascript" src="./dist/js/bootstrap-multiselect.js"></script> -->  
  11. <!--无选择提示为中文,只是部分中文 -->  
  12. <script type="text/javascript" src="./dist/js/bootstrap-multiselect_cn.js"></script>  
  13. <link rel="stylesheet" href="./dist/css/bootstrap-multiselect.css" type="text/css"/>  
  14. <script type="text/javascript">  
  15.     console.log("start");  
  16.     $(document).ready(function() {  
  17.         $('#example-multiple').multiselect();  
  18.         $('#example-radio').multiselect();  
  19.         $('#example-multiple-optgroups').multiselect();  
  20.         $('#example-radio-optgroups').multiselect();  
  21.         /* 
  22.         *分组可选,可折叠,全选时不显示,所有option的数量 
  23.         */  
  24.         $('#example-enableClickableOptGroups').multiselect({  
  25.                                 enableClickableOptGroups: true,  
  26.                 selectAllNumber: false  
  27.         });  
  28.         /* 
  29.         *分组可选,可折叠,可全选,右侧显示下拉选项, 
  30.         *触发选择事件,可搜索,可展示已选择option的数量(numberDisplayed) 
  31.         */  
  32.         $('#example-all').multiselect({  
  33.                 enableClickableOptGroups: true,  
  34.                 enableCollapsibleOptGroups: true,  
  35.                 includeSelectAllOption: true,  
  36.                 buttonWidth: '400px',  
  37.                 dropRight: true,  
  38.                 maxHeight: 200,  
  39.                 onChange: function(option, checked) {  
  40.                 alert($(option).val());  
  41.                                 /*if(条件) { 
  42.                       this.clearSelection();//清除所有选择及显示 
  43.                  }*/  
  44.                 },  
  45.                 nonSelectedText: '请选择',  
  46.                 numberDisplayed: 10,  
  47.                 enableFiltering: true,  
  48.                 allSelectedText:'全部',  
  49.         });  
  50.           
  51.     });  
  52. </script>  
  53. </head>  
  54. <body style="margin-left:10;">  
  55.  1.多选下拉框:  
  56.   
  57.     <select id="example-multiple" multiple="multiple">  
  58.         <option value="cheese">Cheese</option>  
  59.         <option value="tomatoes">Tomatoes</option>  
  60.         <option value="mozarella">Mozzarella</option>  
  61.         <option value="mushrooms">Mushrooms</option>  
  62.         <option value="pepperoni">Pepperoni</option>  
  63.         <option value="onions">Onions</option>  
  64.     </select>  
  65.     <BR/>  
  66. 2.单选下拉框:  
  67.   
  68.     <select id="example-radio">  
  69.         <option value="cheese">Cheese</option>  
  70.         <option value="tomatoes">Tomatoes</option>  
  71.         <option value="mozarella">Mozzarella</option>  
  72.         <option value="mushrooms">Mushrooms</option>  
  73.         <option value="pepperoni">Pepperoni</option>  
  74.         <option value="onions">Onions</option>  
  75.     </select>  
  76.     <BR/>  
  77. 从上面两个来看,能不能多选,主要是multiple="multiple"属性配置...  
  78.   
  79. 3.多选分组下拉框:  
  80.   
  81.     <select id="example-multiple-optgroups" multiple="multiple">  
  82.         <optgroup label="Group 1" class="group-1">  
  83.             <option value="1-1">Option 1.1</option>  
  84.             <option value="1-2" selected="selected">Option 1.2</option>  
  85.             <option value="1-3" selected="selected">Option 1.3</option>  
  86.         </optgroup>  
  87.         <optgroup label="Group 2" class="group-2">  
  88.             <option value="2-1">Option 2.1</option>  
  89.             <option value="2-2">Option 2.2</option>  
  90.             <option value="2-3">Option 2.3</option>  
  91.         </optgroup>  
  92.     </select>  
  93.     <BR/>  
  94. 4.单选分组下拉框:  
  95.   
  96.     <select id="example-radio-optgroups">  
  97.         <optgroup label="Group 1" class="group-1">  
  98.             <option value="1-1">Option 1.1</option>  
  99.             <option value="1-2" selected="selected">Option 1.2</option>  
  100.             <option value="1-3" selected="selected">Option 1.3</option>  
  101.         </optgroup>  
  102.         <optgroup label="Group 2" class="group-2">  
  103.             <option value="2-1">Option 2.1</option>  
  104.             <option value="2-2">Option 2.2</option>  
  105.             <option value="2-3">Option 2.3</option>  
  106.         </optgroup>  
  107.     </select>  
  108.     <BR/>  
  109. 5.分组多选下拉框:  
  110.   
  111.     <select id="example-enableClickableOptGroups" multiple="multiple">  
  112.         <optgroup label="Group 1" class="group-1">  
  113.             <option value="1-1">Option 1.1</option>  
  114.             <option value="1-2">Option 1.2</option>  
  115.             <option value="1-3">Option 1.3</option>  
  116.         </optgroup>  
  117.         <optgroup label="Group 2" class="group-2">  
  118.             <option value="2-1" disabled="disabled">Option 2.1</option>  
  119.             <option value="2-2">Option 2.2</option>  
  120.             <option value="2-3">Option 2.3</option>  
  121.         </optgroup>  
  122.     </select>  
  123. 6.分组多选,可折叠,可全选下拉框:  
  124.   
  125.     <select id="example-all" multiple="multiple">  
  126.         <optgroup label="Group 1" class="group-1">  
  127.             <option value="1-1">Option 1.1</option>  
  128.             <option value="1-2" selected="selected">Option 1.2</option>  
  129.             <option value="1-3" selected="selected">Option 1.3</option>  
  130.         </optgroup>  
  131.         <optgroup label="Group 2" class="group-2">  
  132.             <option value="2-1">Option 2.1</option>  
  133.             <option value="2-2">Option 2.2</option>  
  134.             <option value="2-3">Option 2.3</option>  
  135.         </optgroup>  
  136.     </select>  
  137. </body>  
  138. </html>  

效果如下: 

 

 

 

 

 

 


使用过程中发现与<link rel="stylesheet" href="static/css/ace.min.css" />的ace.min.css样式单冲突,multiselect下拉框checkbox不显示, 

 

查看下拉框与页面中的checkbox有什么不同, 
发现页面中checkbox多了一个<span class="lbl"/>,而multiSelect 下拉框中的checkbox中没有,看看能不能,修改JS,bootstrap-multiselect_cn.js;在脚本中createOptionValue方法中,修改 
Java代码   收藏代码
  1. <script type="text/javascript" src="./dist/js/bootstrap-multiselect_cn.js"></script>  
  2.       /** 
  3.          * Create an option using the given select option. 
  4.          * 
  5.          * @param {jQuery} element 
  6.          */  
  7.         createOptionValue: function(element) {  
  8.             var $element = $(element);  
  9.             if ($element.is(':selected')) {  
  10.                 $element.prop('selected'true);  
  11.             }  
  12.   
  13.             // Support the label attribute on options.  
  14.             var label = this.options.optionLabel(element);  
  15.             var classes = this.options.optionClass(element);  
  16.             var value = $element.val();  
  17.             var inputType = this.options.multiple ? "checkbox" : "radio";  
  18.   
  19.             var $li = $(this.options.templates.li);  
  20.             var $label = $('label', $li);  
  21.             $label.addClass(inputType);  
  22.             $li.addClass(classes);  
  23.   
  24.             if (this.options.enableHTML) {  
  25.                 $label.html(" " + label);  
  26.             }  
  27.             else {  
  28.                 $label.text(" " + label);  
  29.             }  
  30.             //var $checkbox = $('<input/>').attr('type', inputType);  
  31.              
  32.             var $checkbox =  $('<input/>').attr('type', inputType);  
  33.         //测试修改如下  
  34.             //$checkbox.append('<span class="lbl"/>');  
  35.             //$checkbox.after('<span class="lbl"/>');  
  36.             //$('<input>').append('<span class="lbl"/>');  
  37.             //var $checkbox = $('<input/>').attr('type', 'radio'));  
  38.             //solve the ace-admin-min.css,input type is checkbox css collision  
  39.             //var $checkbox = $('<input/>').attr('class', "lbl");  
  40.             //.append('<span class="lbl">&nbsp;信用证</span>'  
  41.         var name = this.options.checkboxName($element);  
  42.             if (name) {  
  43.                 $checkbox.attr('name', name);  
  44.             }  
  45.   
  46.             $label.prepend($checkbox);  
  47.         ...  
  48. }  

测试发现: 
Java代码   收藏代码
  1. $checkbox.append('<span class="lbl"/>');//这个不是我们想要的  

我们想要的是after产生的效果, 
Java代码   收藏代码
  1. $checkbox.after('<span class="lbl"/>');//无效,jquery,找不到,  

但通id可以,调用after可以产生效果,而$('<input/>').after和通过class找不到。 
至于问什么,没能解决,知道可以给我留言,谢谢。 
参考: 
JQuery中html、append、appendTo、after、insertAfter、before、insertBefore、empty、remove的使用: http://www.cnblogs.com/wx1993/p/4806873.html  

放弃修改Js,修改css,bootstrap-multiselect 

修改 
Java代码   收藏代码
  1. <link rel="stylesheet" href="./dist/css/bootstrap-multiselect.css" type="text/css"/>  
  2.   
  3. .multiselect-container>li>a>label>input[type=checkbox] {  
  4.     margin-bottom: 5px  
  5. }  

为 
Java代码   收藏代码
  1. .multiselect-container>li>a>label>input[type=checkbox] {  
  2.     margin-bottom: 5px;  
  3.     margin-left: 20px;  
  4.     opacity:1;/*checkbox透明度*/  
  5.     position:relative     
  6. }  

添加如下样式: 
Java代码   收藏代码
  1. .multiselect.dropdown-toggle.btn.btn-default {  
  2.     background-color: #dbd8d8 !important;  
  3.     color: black !important;  
  4.     border: #c92727 !important;  
  5.     box-shadow: none !important;  
  6.     text-shadow: 0 -1px 0 #d8c8c8 !important;  
  7. }  
  8. .btn.btn-default.multiselect-clear-filter {  
  9.     background-color: #fff9f9 !important;  
  10.     border: #c34e4e !important;  
  11. }  

使用!important主要是,主要让样式的优先级变高,可以来指定,不让ace.min.css覆盖:。 
参考: 
css样式加载顺序及覆盖顺序深入理解: http://www.jb51.net/css/124992.html  
html、css、js文件加载顺序及执行情况: http://www.cnblogs.com/Walker-lyl/p/5262075.html  
CSS样式加载顺序:  
1.<head>标签内有一个<link>标签引用外部CSS文件 
2.内部css样式 
3.标签style样式 
即按在html中css出现的顺序;但这些样式是有优先级的如下, 
CSS样式覆盖顺序深入理解:  
1. 样式表的元素选择器选择越精确,则其中的样式优先级越高: 
id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式 
2. 对于相同类型选择器制定的样式,在样式表文件中,越靠后的优先级越高 
注意,这里是样式表文件中越靠后的优先级越高,而不是在元素class出现的顺序。 
3. 如果要让某个样式的优先级变高,可以使用!important来指定 


测试页面: 
Java代码   收藏代码
  1. <html>  
  2.     <head>  
  3.         <meta charset="utf-8">  
  4.         <script type="text/javascript" src="./bootstrap-multiselect-master/jquery/js/jquery-1.9.1.min.js"></script>  
  5.         <script type="text/javascript">  
  6.             console.log("start");  
  7.             $(document).ready(function() {  
  8.                 //$('<input/>').append('<span class="lbl"/>');  
  9.                 //var $input = $('<input/>').attr('type', 'checkbox');  
  10.                 // $('<input>')创建一个input标签  
  11.                 var $input = $('<input>').attr('type''checkbox');  
  12.                 $input.val("c");  
  13.                 $input.addClass("multiselect-ace")  
  14.                 $(".multiselect-ace").after('<span class="lbl"/>');  
  15.                 //$input.append('<span class="lbl"/>');  
  16.                 //$input.after('<span class="lbl"/>');//无效,jquery,找不到,  
  17.                 $('<span class="lbl"/>').insertAfter($input);  
  18.                 //$('<span class="lbl"/>').appendTo($input);  
  19.                 //$input.appendTo('<span class="lbl"/>');  
  20.                 //var $input = $('<input/>').append('<span class="lbl"/>');  
  21.                 $("#test").append($input);  
  22.                 //$("#test").after('<span class="lbl"/>');  
  23.                 //alert( $('<input/>').val());  
  24.               
  25.             });  
  26.         </script>  
  27.     </head>  
  28.     <body>  
  29.         <select>  
  30.             <option>test</option>  
  31.         </select>  
  32.         <BR/>  
  33.         <input id="test" type="radio" name="test" value="v"/>  
  34.         <BR/>  
  35.         <!-- <input type="checkbox"/> -->  
  36.     </body>  
  37. </html>  
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值