再現方法:
Chromeでhttp://ivaynberg.github.com/select2/select2-latest.htmlにアクセスします。
Web開発コンソールを開き、次のように入力します。
$( "#e1")。select2()
"TypeError:Object-1にはメソッド'show'がありません"
最初の選択が消えます、なぜですか?
再現方法:
Chromeでhttp://ivaynberg.github.com/select2/select2-latest.htmlにアクセスします。
Web開発コンソールを開き、次のように入力します。
$( "#e1")。select2()
"TypeError:Object-1にはメソッド'show'がありません"
最初の選択が消えます、なぜですか?
問題は、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わかりませんが、コードを理解しているとは言えません。