multiselect 初始化赋值

jquery有很多插件,比如jquery.multiselect.js(多选下拉框),使用的时候非常便捷,但有的时候你遇到问题,可能非常难解决(今天解决这个问题弄了将近2个小时),一般情况下解决问题的思路可能如下:
(1)百度搜索,去寻找解决方案(自从有了爬虫这个东西,答案就泛滥了,几乎是千篇一律,原创的东西越来越少
(2)通过F12调试,分析出原因
(3)但是如果还是解决不了,这个时候你必须要看源码

需求:在初次加载的时候,给multiselect设置多个值。

multiselect 初始化赋值_第1张图片
 
在网上找了N多的答案,几乎是千篇一律:
(1)我自己封装了一个方法,就是给multiselect设置一个数组的值,然后刷新一下
 function multiselectRefreshWithValues(multiselectId,vals) {
  $("#"+multiselectId).multiselect({
            checkAllText: "全选",
            uncheckAllText: "全不选",
            noneSelectedText: "==请选择==",
            selectedList: 100
        });
  $("#"+multiselectId).val(vals);
     $("#"+multiselectId).multiselect("refresh");     
 }

这种方案只能显示一个值,真的找不到原因,

然后我就F12了,发现我们本身的select全部是隐藏掉的,然后multiselect自己生成了很多的ul li label input等等,这个时候我就想 我可以自己拼装出 input的id,然后调用 click事件,然后在刷新。

multiselect 初始化赋值_第2张图片
 
var multiselectName = "multiselect_"+multiselectId;
     $("input[name='"+multiselectName+"']").each(function(){
      if(vals.contains($(this).val())) {
       $(this).attr("aria-selected",true);
      }
     })

通过这种方案,完全可以设置 input的aria-selected属性,但是显示的时候,什么也没有了。

最后逼到没有办法了,看源码:

(1)刷新的时候有很多的属性,可以设置,这个时候设置multiple=true,问题全部搞定

multiselect 初始化赋值_第3张图片
 


multiselect 初始化赋值_第4张图片
 
 

 


你可能感兴趣的:(select)