这个问题出于好奇。我正在处理插件,并在为其创建演示页时遇到此问题。
我有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'事件,从而执行处理程序。
DEMO: http://jsfiddle.net/EEGcz/4/
有谁知道为什么? 我使用的是IE8
同样适用于attachEvent - http://jsfiddle.net/maeRg/
答案 0 :(得分: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';