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,您可以看到您的 className 是第二个示例中更改的属性,但第一个示例通过使用 test.onpropertychange 而不是 attachEvent 附加到它的行为来触发事件。所以在第一个例子中,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 回答