我在小提琴中设置了一个select
,其中包含3 option
s(1个空格)。当我手动从foo
切换到bar
时,change
侦听器会正常触发。
现在,如果我使用code posted in some answers here通过JS重置select
,则change
事件不会针对新选择的空白选项触发,此外,如果我选择了选中的选项在点击reset
按钮之前,onchange
事件也不会触发。
我确定使用上面的函数更改了select
的值 ,这可以在fiddle中看到,但是select
onchange
事件根本不会触发。
我还尝试了onchange
,onclick
,oninput
事件无济于事。现在我想知道我是否应该使用MutationObserver或从DOM中删除渲染的选定元素并创建另一个,但我可能会过度思考它。任何帮助表示赞赏。
此外:
这个答案对我有很大帮助: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());
});
});
答案 0 :(得分: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());
});
答案 1 :(得分:4)
从FabrícioMatté的评论中复制一个对我有用的答案,以便其他人不会看到这篇文章,并且最初会像我一样错过解决方案。
$('#chosen_chzn').remove();
$('#chosen').val('').change().removeClass('chzn-done').chosen();
我最初尝试继续使用.trigger('liszt:updated')
调用而不是.change()
,但这不起作用。没有看到.removeClass('chzn-done')
背后的推理,但这也是必不可少的,否则你的选择框就会消失。