再現方法:
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.elementTabIndex
isを呼び出し、 isundefined
と.attr(name, undefined)
同等であるため.attr(name)
、(jquery 要素の代わりに) 属性自体を返すことです。したがって、属性値を取得し、'-1'
もちろん'-1'.show()
意味がありません。
クラッジとして、使用します.attr("tabIndex", this.elementTabIndex || -1)
。より良い修正は、初期化destroy
された後にのみ呼び出すことです。this.elementTabIndex
への呼び出しattr
が本当に必要かどうかはdestroy
わかりませんが、コードを理解しているとは言えません。