那不是在内联事件中使用event变量。
在这种情况下是从内联事件调用buttonClick的函数;被调用的函数没有对变量的神奇访问(是 IE 功能)。此外,在帖子中,使用 0 个参数调用,因此将始终评估为未定义。eventwindow.eventbuttonClicke
在任何情况下,与下面的比较,因为对特殊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。