HTML:监听输入的* all *更改,而不仅仅是键盘驱动的更改?

时间:2011-11-01 21:01:57

标签: javascript html dom

例如,如果我有这样的输入:

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

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

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

修改:请注意,问题是询问如何监听更改,而不是“如何手动分发更改”。我很清楚我可以手动调度更改事件,但我试图避免这种情况。

4 个答案:

答案 0 :(得分:2)

每当调用$时,您都可以将change()原型更改为始终触发val(value)个事件:

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

答案 1 :(得分:1)

答案 2 :(得分:1)

您无法可靠地订阅输入元素上的每个更改,但您可以检查自上次检查后是否有更改,并在某个所需的时间粒度内执行此更改。

制作一个检查功能,并按照您所需的时间粒度循环 - 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);

答案 3 :(得分:0)

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

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