2

この質問は好奇心からです。私はプラグインに取り組んでおり、プラグインのデモ ページを作成するときにこの問題が発生しました。

私はdiv以下のような要素を持っています、

<div id="test">Test</div>

以下のようなハンドラ関数、

function onPropChange () {
    alert('Property changed for ' + window.event.srcElement.nodeName + 
          ' event ' +  window.event.type);

}

そして今、以下のようにハンドラーをバインドしようとしました、

document.getElementById('test').onpropertychange = onPropChange;

バインド時に、これにより「propertychange」イベントがトリガーされ、ハンドラーが実行されます。

デモ: http://jsfiddle.net/EEGcz/4/

誰かが理由を知っていますか?私はIE8を使用しています

同じことが attachEvent でもうまくいきます - http://jsfiddle.net/maeRg/

4

1 に答える 1

3

event.propertyNameを見ると、2番目の例ではclassNameが変更されたプロパティであることがわかりますが、最初の例では、attachEventではなくtest.onpropertychangeを使用してイベントにアタッチするという行為によってイベントをトリガーします。したがって、最初の例では、propertyNameは「onpropertychange」です。

この変更を試して、最初のタイプのイベントバインディングが実際にイベント自体をどのようにトリガーしているかを確認してください。

var i = 1;
function onPropertyChange() {
    alert('Property changed called ' + i++ + ' for ' + (window.event.propertyName));
    }
var test =  document.getElementById('test');
// play with commenting and uncommenting out the following two lines
//test.onpropertychange = onPropertyChange;
test.attachEvent("onpropertychange", onPropertyChange);

test.className = 'test2';
于 2012-11-30T23:38:49.707 に答える