为啥尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制]

Posted

技术标签:

【中文标题】为啥尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制]【英文标题】:why does the jquery change event not trigger though the value of input changed indeedly? [duplicate]为什么尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制] 【发布时间】:2014-06-26 02:15:36 【问题描述】:

JSFIDDLE html代码:

<body>
    <input value="123">
    <button>button</button>
</body>

Js代码(使用JQuery 1.2.0):

$(function()
    $("button").click(function()
        $("input").val("balabala...");
    );

    $("body").on("change","input",function()
        alert("change");
        alert($("input").val());
    );
);

问题: 一开始,输入的值为“123”。 当我通过手动编辑更改文本并单击输入字段以外的其他位置时,将触发输入的更改事件。 但是,当我单击按钮时,也会更改输入的值,输入的更改事件将不起作用。 感谢您的帮助。

【问题讨论】:

另见:***.com/questions/3179385/… @Todd,谢谢,它们很相似并且几乎相同。 【参考方案1】:

JSFiddle

您需要将.change() 附加到click 函数上:

$(function()
    $("button").click(function()
        $("input").val("balabala...").change();

    );

    $("body").on("change","input",function()
        alert("change");
        alert($("input").val());
    );
);

【讨论】:

谢谢,它也有效。 :-)【参考方案2】:

使用代码以编程方式更改值时不会触发change 事件,您必须自己触发它

$(function()
    $("button").click(function()
        $("input").val("balabala...").trigger('change');
    );

    $("body").on("change","input",function()
        alert("change");
        alert($("input").val());
    );
);

FIDDLE

【讨论】:

哦,只是出于兴趣,使用.trigger('change').change() 有什么区别? @adeneo 可以,谢谢! 在这种情况下真的没有区别,jQuery 只是有一个特殊的 trigger() 方法可以做到这一点,它接受的选项比仅仅使用 .change() 啊,好的,谢谢 :) @adeneo @BeatAlex 这两种方法都有效,但我不知道细节上的区别。

以上是关于为啥尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥是“$”的值?在“如果”条件下发生了变化?

为啥“x”的值发生了变化? [复制]

printList函数中原始头指针没有改变,但插入节点时列表确实发生了变化

尽管状态发生了变化,但自定义钩子不会触发组件重新渲染

当提供者组件父状态发生变化时,为啥不能更新子组件中的值(带有反应上下文)?

为啥actionbar sherlock的横向高度会发生变化?