2

スクリプトが要素 (テキスト フィールド) を変更するときにイベント ハンドラーをトリガーしようとしています。Internet inputExplorer では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 はまだサポートしています。)

4

2 に答える 2

7

入力の値を変更してもイベントは発生しませんDOMAttrModified。それだけです。

変数のプロパティではなく、入力ノードの属性を変更する必要があります。2 つのjQuery 関数の違い のようなものです。
.prop.attr

読んだ:

于 2012-05-02T17:28:57.740 に答える
2

(この質問に関連するため、 Which HTMLElement property change generate DOMAttrModified? hereからの回答を繰り返します):

「disabled」属性が設定されている場合、DOMAttrModified イベントは発生しないことにも注意してください。したがって、イベントが発生していない場合は、それが原因である可能性があります。これは、IE のみの「onPropertyChange」イベントにも当てはまります。

于 2012-11-19T19:26:19.640 に答える