在select输入上多次调用select2()会使其消失

时间:2013-02-06 16:21:29

标签: javascript jquery jquery-select2

如何重现:

使用Chrome转到http://ivaynberg.github.com/select2/select2-latest.html

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

$( “#E1”)。SELECT2()

  
    

“TypeError:对象-1没有方法'show'”

  

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

1 个答案:

答案 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.elementTabIndexundefined.attr(name, undefined)等同于.attr(name),因此返回属性本身(而不是jquery元素)那么你得到了属性值'-1',当然,'-1'.show()毫无意义。

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