0

如何重现:

使用 Chrome访问http://ivaynberg.github.com/select2/select2-latest.html 。

打开 Web 开发控制台,输入:

$("#e1").select2()

“类型错误:对象 -1 没有方法‘显示’”

第一个选择消失了,为什么?

4

1 回答 1

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.elementTabIndexisundefined并且.attr(name, undefined)等价于.attr(name),从而返回属性本身(而不是 jquery 元素。所以你得到了属性 value '-1''-1'.show()那么当然没有任何意义。

作为一个kludge,使用.attr("tabIndex", this.elementTabIndex || -1). 更好的解决方法可能是destroy仅在this.elementTabIndex初始化后调用。我不确定是否attr真的需要调用 to destroy,但是我不能声称我理解代码。

于 2013-02-06T21:14:55.820 回答