那不是在内联事件中使用event
变量。
在这种情况下是从内联事件调用buttonClick
的函数;被调用的函数没有对变量的神奇访问(是 IE 功能)。此外,在帖子中,使用 0 个参数调用,因此将始终评估为未定义。event
window.event
buttonClick
e
在任何情况下,与下面的比较,因为对特殊event
变量的访问是从内联事件本身完成的,然后将事件对象传递给“真实”事件处理函数:
<input type="button" value="Submit"
onclick="buttonClick(window.event||event)" />
<script type="text/javascript">
function buttonClick(e) {
alert(e.type);
return false;
}
</script>
(我建议使用 jQuery 或其他库来使统一事件访问更容易,但那是另一回事了..)
请注意,这window.event||event
是一个肮脏的小技巧:
在 IEwindow.event
中,将评估事件对象并用作表达式的结果(因此event
)永远不会被评估。在非 IE 浏览器中,window.event
将评估为未定义(除非有人在做一些非常糟糕的事情),因此结果将是event
变量的结果。
将其反转为event||window.event
不支持 W3C 局部event
变量方法的浏览器(即 IE)会导致 ReferenceError。