フィドルに3つのselect
s(1つの空白)を含むoption
を設定しました。手動でfoo
からbar
に切り替えると、change
リスナーが正常に起動します。
ここで、JSを介してselect
を ここにいくつかの回答に投稿されたコード でリセットすると、新しく選択された空白のオプションに対してchange
イベントが発生しません。 reset
ボタンをクリックする前に選択したオプションを選択すると、onchange
イベントも発生しません。
select
の値はが上記の関数で変更されていると確信しています。これは、次のようになります fiddle ですが、select
のonchange
イベントは単に発生しません。
また、onchange
、onclick
、oninput
イベントを試しましたが役に立ちませんでした。今のところ、MutationObserverを使用するか、レンダリングされた選択された要素をDOMから削除して別の要素を作成する必要があるのか疑問に思っていますが、おそらくそれを考えすぎています。どんな助けでも大歓迎です。
また:
この答えは私を大いに助けました: jQuery選択リセット
この答えは役に立ちませんでした: 選択したプロトタイプ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());
});
});
$(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());
});
私のために働いたFabrícioMattéのコメントから回答をコピーして、他の人がこの投稿を見たり、私がしたように最初は解決策を見逃したりしないようにします。
_$('#chosen_chzn').remove();
$('#chosen').val('').change().removeClass('chzn-done').chosen();
_
私はもともと.trigger('liszt:updated')
の代わりに.change()
呼び出しを使い続けようとしましたが、うまくいきませんでした。 .removeClass('chzn-done')
の背後にある理由もわかりませんでしたが、これも不可欠です。そうしないと、選択ボックスが消えてしまいます。