div.addEventListener("mousemove", function(){test(event, this)}, true);
好吧,你当然会得到“事件未定义”!当。。。的时候mousemove
事件触发器,您的事件处理程序被调用:
function(){test(event, this)}
有两种方法可以到达事件信息对象。它要么作为参数传递给事件处理程序,要么可以在window.event
.
假设第二种情况成立。因为没有名为的局部变量event
在你的函数中,也没有这样的变量function1
调用它,浏览器会查找是否有event
定义在全局对象中。在 JavaScript 中,全局对象被称为window
,所以你的函数被解释为
function(){test(window.event, this)}
它有效。
但是,正如我之前指出的,在某些浏览器中,事件信息是在参数中传递的。所以你的事件处理程序可能希望看起来像这样:
function(event){test(event, this)}
否则event
传递给test()
将是未定义的。因此,这是制作跨浏览器处理程序的方法:
function(event) {
if (!event) // i.e. the argument is undefined or null
event = window.event;
test(event, this);
}
第二个问题是addEventListener()
在较旧的 IE 中不起作用(但在 IE9 中起作用)。对于较旧的 IE,您必须使用类似的函数,称为attachEvent()
。或者,如果您只附加一个处理程序,您可以用简单的方法来完成
div.onmousemove = function() {...};