multiselect 初始化赋值
jquery有很多插件,比如jquery.multiselect.js(多选下拉框),使用的时候非常便捷,但有的时候你遇到问题,可能非常难解决(今天解决这个问题弄了将近2个小时),一般情况下解决问题的思路可能如下:
(1)百度搜索,去寻找解决方案(自从有了爬虫这个东西,答案就泛滥了,几乎是千篇一律,原创的东西越来越少)
(2)通过F12调试,分析出原因
(3)但是如果还是解决不了,这个时候你必须要看源码。
需求:在初次加载的时候,给multiselect设置多个值。
在网上找了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事件,然后在刷新。
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,问题全部搞定