9

問題があります。select要素にウィジェットを適用しています 。同じselect要素値を再読み込みするときは、要素のウィジェットを削除してselect再適用します。ただし、同じ要素にウィジェットを再適用している間は、変更は反映されません。

以下は、HTMLのselectステートメントです。

<select id="countries" class="multiselect" multiple="multiple" name="countries">
        <option value="USA">United States</option>
        ...
</select>

同じ要素にウィジェットを適用するには:

function applyWidget(){ 
    $(".multiselect").multiselect();
}

ウィジェットが適用されると、divwithが作成されclass=".ui-multiselect"ます。

ウィジェットクラスを削除するには:

function removeWidget(){
    $(".ui-multiselect").remove();
}

applyWidget()初めてメソッドを呼び出すことは正常に機能しています。2回目の呼び出しは機能していません。要素にウィジェットをリロードするにはどうすればよいですか?

4

2 に答える 2

12

まず、ウィジェットでメソッドを使用できるようにする必要がありdestroyます。その方法は、jQueryUI 1.8 以前を使用しているか、jQueryUI 1.9 以降を使用しているかによって異なります。

divこれらの例では、次のコードで複数選択を参照していると仮定しています。

_create: function () {
    this.multiselect = $("<div>").addClass("ui-multiselect")...
}

jQuery 1.8 を使用している場合、ウィジェットは以下を定義する必要がありますdestroy

destroy: function()
{
    this.multiselect.remove();
    $.Widget.prototype.destroy.call(this);
}

それ以外の場合、jQuery 1.9 以降では、以下を定義する必要があります_destroy

_destroy: function () 
{
    this.multiselect.remove();
}

jQueryUI のバージョンに応じて、上記の 2 つのメソッドのいずれかのみを含めること、および 1.9 バージョンの前にアンダースコアが付くことに注意してください_。jQueryUI 1.9 では、アンダースコアなしで destroy を定義しないでください。これは、ウィジェット ファクトリがそのメソッドを定義し、メソッドを上書き (および破棄) するためです。

それが完了したら、再作成する前にウィジェットを「破棄」するようにコードを変更する必要があります。

function removeWidget(){
    $(".multiselect").multiselect("destroy");
}
于 2013-04-17T16:13:07.613 に答える
3

ウィジェットを破棄する必要があります。そうしないと、再バインドされません。

function removeWidget() { 
    $(".ui-multiselect").multiselect("destroy");
    $(".ui-multiselect").multiselect(); 
}
于 2012-05-22T20:46:52.310 に答える