HTML:监听输入的所有更改,而不仅仅是键盘驱动的更改

HTML: listen for *all* changes to an input, not just keyboard-driven changes?

本文关键字:不仅仅是 键盘 盘驱 监听 HTML 输入      更新时间:2023-09-26

例如,如果我有如下输入:

<input id="myInput" type="text" />

当值以编程方式更改时(例如,作为$("#myInput").val("new value")的结果)如何通知我?

示例:http://jsfiddle.net/2ax9y/

Edit:请注意,问题是问如何侦听更改,而不是"如何手动调度更改"。我很清楚我可以手动调度更改事件,但我尽量避免这种情况。

您可以更改$原型,以便在val(value)被调用时始终触发change()事件:

$.prototype.changeval = $.prototype.val;
$.prototype.val = function(v) {
    if (v) {
        $(this).changeval(v);
        $(this).change();
    } else {
        return $(this).changeval();
    }
}

触发更改:http://jsfiddle.net/maniator/2ax9y/1/


有一点不同:http://jsfiddle.net/maniator/2ax9y/2/

您不能可靠地订阅输入元素上的每个更改,但是您可以检查自上次检查以来是否有更改,并在所需的时间粒度内完成。

创建一个检查器函数并循环使用所需的时间粒度- 100ms是一个很好的开始,根据您的需要进行调整。

假设未测试的实现:

var last_value = null;
function handle_changed() {
    // Do something here
}
function check_value() {
    var v = $("#myelement").val();
    if(v !== last_value) {
        last_value = v;
        handle_changed();
    }
}
setInterval(check_value, 100);

我不认为这是变更事件的固有能力。当您以编程方式更改值时,您可以手动触发更改事件。

$("#myInput").val(+(new Date())).change();