我有一个文本输入,其内容是由脚本而不是用户更改的。所以我想在值改变时触发一个事件。我找不到合适的事件。 我什至找到了this on StackOverflow ,但这不是我正在寻找的解决方案。
如何使用 jQuery 和文本输入使其工作,其中的值设置如下:
myTextControl.value = someValue
在这里我想触发一个事件来查看新值。
最佳答案
I can't find a suitable event for that.
是的,没有。
有DOM Mutation Events , 但它们不能很好地跨浏览器支持,并且无论如何都不会触发表单值,因为它们没有反射(reflect)在属性中(除了 IE 中的错误)。
仅在 Mozilla 中,JavaScript watch可以在 value 属性上设置以捕获脚本更改。仅在 IE 中,JScript onpropertychange处理程序可以设置为捕获脚本和用户驱动的更改。在其他浏览器中,您必须使用自己的间隔轮询器来查找更改。
function watchProperty(obj, name, handler) {
if ('watch' in obj) {
obj.watch(name, handler);
} else if ('onpropertychange' in obj) {
name= name.toLowerCase();
obj.onpropertychange= function() {
if (window.event.propertyName.toLowerCase()===name)
handler.call(obj);
};
} else {
var o= obj[name];
setInterval(function() {
var n= obj[name];
if (o!==n) {
o= n;
handler.call(obj);
}
}, 200);
}
}
watchProperty(document.getElementById('myinput'), 'value', function() {
alert('changed!');
});
这是非常不令人满意的。它不会响应 Mozilla 中用户驱动的更改,它只允许在 IE 中每个对象有一个被监视的属性,而在其他浏览器中,处理函数将在执行流程中很晚才被调用。
重写设置 value
的脚本部分以调用 setValue 包装函数几乎肯定会更好,这样您就可以监视要捕获的更改。
关于javascript - JS 事件 : hooking on value change event on text inputs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847893/