2

当脚本修改元素(文本字段)时,我试图触发事件处理程序input。在 Internet Explorer 上,我可以使用该onpropertychange事件,但在 Firefox 和其他浏览器上没有这样的事件。因此,根据W3C 文档,该DOMAttrModified事件似乎完全符合我的要求。但它不会在Firefox 11.

这是一个重现问题的简单代码片段。我有一个输入文本字段和一个向value输入文本字段的属性添加字符的按钮。点击add char按钮应该会DOMAttrModified触发事件:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
            function addChar() {
                var q = document.getElementById("query");
                q.value += "X";
            }

            function loadevents() {
                var q = document.getElementById("query");
                q.addEventListener("DOMAttrModified", function() {alert("DOMAttrModified event!");
                }, false);
            }
        </script>
    </head>
    <body onLoad="loadevents()">
        <input type="text" id="query">
        <br>
        <input type="submit" value="add char" onclick="addChar()">
    </body>
</html>

但事实并非如此。知道我做错了什么吗?(我知道 DOM Level 3已弃用此事件,但目前似乎没有可行的替代方案。据我所知,Firefox 11 仍然支持它。)

4

2 回答 2

7

更改输入中的值不会触发DOMAttrModified事件,仅此而已..

您需要更改输入节点的属性,而不是变量的属性
这就像两个 jQuery 函数之间的区别:.prop.attr

读:

于 2012-05-02T17:28:57.740 回答
2

(重复我从哪个 HTMLElement 属性更改生成 DOMAttrModified?的回答,因为它与这个问题有关):

Please also note that NO DOMAttrModified events will be fired when the 'disabled' attribute is set. So if your event is not firing, that could be the reason. This also goes for the IE-only 'onPropertyChange' event.

于 2012-11-19T19:26:19.640 回答