当脚本修改input元素(文本字段)时,我试图触发事件处理程序。在Internet Explorer上,我可以使用onpropertychange事件,但是在Firefox和其他浏览器上没有此类事件。因此,根据W3C docs,似乎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仍然支持该事件。)

最佳答案

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

您需要更改输入节点的属性,而不是变量的属性
就像difference between the two jQuery functions: .prop and .attr

读:

  • Which HTMLElement property change generates DOMAttrModified?
  • this forum discussion
  • 09-20 15:48