9

JSFiddle

我在小提琴中设置了select3option秒(1 个空白)。当我从手动切换时,foo侦听器会正常触发。barchange

现在,如果我使用此处发布的一些答案中的代码重置select通过 JS,则不会为新选择的空白选项触发事件,此外,如果我选择在单击按钮之前选择的选项,则事件也不会触发.changeresetonchange

我确定select' 的值正在使用上面的函数进行更改,这可以在这个fiddle中看到,但是select'onchange事件根本不会触发。

我也试过onchange, onclick,oninput事件无济于事。现在我想知道是否应该使用 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ício Matté 的评论中复制一个对我有用的答案,这样其他人就不会像我一样看到这篇文章并错过一个解决方案。

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

在他的小提琴上看到这个

我最初尝试继续使用.trigger('liszt:updated')call 而不是 the ,.change()但这没有用。也没有看到背后的原因.removeClass('chzn-done'),但这也是必不可少的,否则您的选择框将消失。

于 2012-08-28T20:24:17.110 回答