当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>

当前回答

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

你可以这样做:

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

or

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

其他回答

就我所能读到的API。该事件仅在用户单击某个选项时触发。

http://api.jquery.com/change/

对于选择框、复选框和 单选按钮,事件被触发 当用户执行 用鼠标选择,但对于 事件的其他元素类型 延迟,直到元素丢失 的焦点。

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

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

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

要更改值

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

还可以触发更改事件

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

当页面上有多个选择选项时,这种逻辑是有用的。 一个更改和其他选择选项必须更改,但不会触发更改事件。

如果您不想与默认更改事件混淆,您可以提供您的自定义事件

$('input.test').on('value_changed', function(e){
    console.log('value changed to '+$(this).val());
});

要在值设置上触发事件,可以执行以下操作

$('input.test').val('I am a new value').trigger('value_changed');

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

你可以这样做:

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

or

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