javascript - JS 事件 : hooking on value change event on text inputs

标签 javascript jquery events input

我有一个文本输入,其内容是由脚本而不是用户更改的。所以我想在值改变时触发一个事件。我找不到合适的事件。 我什至找到了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/

相关文章:

javascript - 提交按钮在执行 1 个功能后不会发布数据

javascript - 如何使用 jQuery 将元素的内容设置为其属性的值

c# - 变更通知的最佳模式(事件或委托(delegate))

javascript - 将 javascript 事件获取到被覆盖的对象

javascript - 从appendTo内容内部调用 Action

javascript - 主干 View : function is undefined

javascript - 单击 iframe 时,它​​会加载正在显示的页面

jquery - 无法弄清楚如何使用 jquery 清除选择框的文本

javascript - FancyBox 将 DIV 的内容显示为 iFrame 类型

javascript - 为什么javascript函数的返回值未定义?