JSFiddle
我在这个示例中设置了一个带有 3 个选项(1 个空白)的 select
。当我手动从 foo
切换到 bar
时,change
监听器会正常触发。
现在,如果我使用此处发布的代码通过 JS 重置 select
,则新选择的空白选项不会触发 change
事件,而且如果我选择之前单击 reset
按钮所选中的选项,则 onchange
事件也不会触发。
我确信上述函数正在更改 select
的值,可以在此示例中看到,但是 select
的 onchange
事件根本不会触发。
我还尝试过 onchange
、onclick
、oninput
事件,但都无济于事。现在我想知道是否应该使用 MutationObserver 或从 DOM 中删除呈现的 chosen 元素并创建另一个元素,但我可能想太多了。感谢任何帮助。
还有:
这个答案对我很有帮助:jQuery Chosen reset
这个答案没有帮助:how to fire onchange event in chosen prototype javascript select box?
如果 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());
});
});