如何重现:
使用Chrome转到http://ivaynberg.github.com/select2/select2-latest.html。
打开Web开发控制台,输入:
$( “#E1”)。SELECT2()
“TypeError:对象-1没有方法'show'”
并且第一个选择消失了,为什么?
答案 0 :(得分:1)
问题是,在第二次调用时,代码想要在创建新的下拉列表之前销毁旧生成的下拉列表。它是在正确初始化之前这样做的。
相关代码位于"删除"围绕第645行的功能:
if (select2 !== undefined) {
select2.container.remove();
select2.dropdown.remove();
select2.opts.element
.removeData("select2")
.unbind(".select2")
.attr("tabIndex", this.elementTabIndex) <--- fail here
.show();
麻烦是调用.attr("tabIndex", this.elementTabIndex)
而this.elementTabIndex
为undefined
且.attr(name, undefined)
等同于.attr(name)
,因此返回属性本身(而不是jquery元素)那么你得到了属性值'-1'
,当然,'-1'.show()
毫无意义。
作为kludge,使用.attr("tabIndex", this.elementTabIndex || -1)
。
更好的解决方法可能是在初始化destroy
后调用this.elementTabIndex
。我不确定在attr
中是否真的需要destroy
来电,但我不能声称我理解代码。