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,问题全部搞定
?
?
?
?
原文:http://toknowme.iteye.com/blog/2222996