0

再現方法:

Chromeでhttp://ivaynberg.github.com/select2/select2-latest.htmlにアクセスします。

Web開発コンソールを開き、次のように入力します。

$( "#e1")。select2()

"TypeError:Object-1にはメソッド'show'がありません"

最初の選択が消えます、なぜですか?

4

1 に答える 1

1

問題は、2 回目の呼び出しで、コードが新しいドロップダウンを作成する前に、古い生成されたドロップダウンを破棄しようとすることです。これは、自身を適切に初期化する前に行われます。

関連するコードは、645 行目あたりの「delete」関数にあります。

 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.elementTabIndexisを呼び出し、 isundefined.attr(name, undefined)同等であるため.attr(name)、(jquery 要素の代わりに) 属性自体を返すことです。したがって、属性値を取得し、'-1'もちろん'-1'.show()意味がありません。

クラッジとして、使用します.attr("tabIndex", this.elementTabIndex || -1)。より良い修正は、初期化destroyされた後にのみ呼び出すことです。this.elementTabIndexへの呼び出しattrが本当に必要かどうかはdestroyわかりませんが、コードを理解しているとは言えません。

于 2013-02-06T21:14:55.820 に答える