例如,如果我有这样的输入:
<input id="myInput" type="text" />
如果以编程方式更改值(例如,$("#myInput").val("new value")
的结果),我如何得到通知?
修改:请注意,问题是询问如何监听更改,而不是“如何手动分发更改”。我很清楚我可以手动调度更改事件,但我试图避免这种情况。
答案 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();