当val()设置值时,change()事件处理程序中的逻辑不会运行,但当用户用鼠标选择一个值时,它会运行。为什么会这样?

<select id="single">
    <option>Single</option>
    <option>Single2</option>
</select>

<script>
    $(function() {
        $(":input#single").change(function() {
           /* Logic here does not execute when val() is used */
        });
    });

    $("#single").val("Single2");
</script>

当前回答

$(":input#single").trigger('change');

这对我的剧本很管用。我有3个组合和绑定与chainSelect事件,我需要通过url和默认选择3个值都下拉。我用了这个

$('#machineMake').val('<?php echo $_GET['headMake']; ?>').trigger('change');

第一个活动成功了。

其他回答

在val()之后添加这段代码似乎可以工作:

$(":input#single").trigger('change');

我相信你可以用trigger()手动触发变更事件:

$("#single").val("Single2").trigger('change');

虽然我不知道为什么它不会自动发射。

如果你刚刚在表单中添加了选择选项,并且你希望触发更改事件,我发现需要一个setTimeout,否则jQuery不会选择新添加的选择框:

window.setTimeout(function() { jQuery('.languagedisplay').change();}, 1);

因为更改事件需要由用户发起的实际浏览器事件,而不是通过javascript代码。

你可以这样做:

$("#single").val("Single2").trigger('change');

or

$("#single").val("Single2").change();

为了更简单,添加一个自定义函数,当你想要更改值时调用它,并触发更改:

$.fn.valAndTrigger = function (element) {
    return $(this).val(element).trigger('change');
}

and

$("#sample").valAndTrigger("NewValue");

或者你可以重写val()函数,在val()被调用时总是调用更改:

(function ($) {
    var originalVal = $.fn.val;
    $.fn.val = function (value) {
        this.trigger("change");
        return originalVal.call(this, value);
    };
})(jQuery);

样本在http://jsfiddle.net/r60bfkub/