9

JSFiddle

フィドルにselect3 s (1 ブランク)を設定しました。から手動でoption切り替えると、リスナーは正常に起動します。foobarchange

ここでいくつかの回答に投稿されselectたコードを使用して JSをリセットすると、新しく選択された空白のオプションに対してイベントが発生しません。さらに、ボタンをクリックする前に選択されたオプションを選択すると、イベントも発生しません。 .changeresetonchange

selectの値上記の関数で変更されていると確信していますが、これはこのfiddleで確認できますが、selectonchangeイベントは単に発生しません。

onchangeonclickoninputイベントも試しましたが、役に立ちませんでした。現在、MutationObserver を使用するか、レンダリングされた選択した要素を DOM から削除して別の要素を作成するかを考えていますが、おそらく考えすぎです。どんな助けでも大歓迎です。

また:

この回答は私を大いに助けてくれました: jQuery Chosen reset

この回答は役に立ちませんでした:選択したプロトタイプの javascript 選択ボックスで onchange イベントを発生させる方法は?

jsfiddle.net が削除された場合の将来の参照用のコード:

HTML

<div id="wrapper">
    <select id="chosen">
        <option value="!!EMPTY VALUE!!"></option>
        <option value="foo">foo</option>
        <option value="bar">bar</option>
    </select>
</div>
<br>
<button id="reset">Reset</button>

JS

$(function() {
    $('#chosen').chosen();

    $('#wrapper').on('change', '#chosen', function() {
        console.log('onchange: ' + this.value);
    });

    $('#reset').click(function() {
        $("#chosen").val('').trigger("liszt:updated"); //doesn't work
        //$("#chosen").prop('selectedIndex', 0).trigger("liszt:updated"); //doesn't work either
        console.log('reset: ' + $('option:selected').val());
    });
});
4

2 に答える 2

9

で値を変更した後、変更をトリガーする必要があります$(selector).trigger("change")

$('#reset').click(function() {
        $("#chosen").val('').trigger("change"); //doesn't work
        //$("#chosen").prop('selectedIndex', 0).trigger("liszt:updated");
        console.log('reset: ' + $('option:selected').val());
    });
于 2012-06-23T01:15:54.693 に答える
5

私のために働いたFabrícioMattéのコメントから回答をコピーして、他の人がこの投稿を見たり、私がしたように最初は解決策を見逃したりしないようにします。

$('#chosen_chzn').remove();
$('#chosen').val('').change().removeClass('chzn-done').chosen();

彼のフィドルでこれを見てください

.trigger('liszt:updated')私はもともと代わりに呼び出しを使い続けようとしました.change()が、それはうまくいきませんでした。どちらの背後にも理由がわかりませんでした.removeClass('chzn-done')が、これも不可欠です。そうしないと、選択ボックスが消えてしまいます。

于 2012-08-28T20:24:17.110 に答える