如何重现:
使用 Chrome访问http://ivaynberg.github.com/select2/select2-latest.html 。
打开 Web 开发控制台,输入:
$("#e1").select2()
“类型错误:对象 -1 没有方法‘显示’”
第一个选择消失了,为什么?
如何重现:
使用 Chrome访问http://ivaynberg.github.com/select2/select2-latest.html 。
打开 Web 开发控制台,输入:
$("#e1").select2()
“类型错误:对象 -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)
while this.elementTabIndex
isundefined
并且.attr(name, undefined)
等价于.attr(name)
,从而返回属性本身(而不是 jquery 元素。所以你得到了属性 value '-1'
,'-1'.show()
那么当然没有任何意义。
作为一个kludge,使用.attr("tabIndex", this.elementTabIndex || -1)
. 更好的解决方法可能是destroy
仅在this.elementTabIndex
初始化后调用。我不确定是否attr
真的需要调用 to destroy
,但是我不能声称我理解代码。