例如,如果我有如下输入:
<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();