假设我内联添加事件处理程序,使用元素的onclick
attrubute,如下所示:
<input type="button" value="Submit" onclick='buttonClick()' />
然后这是我的处理程序:
<script type="text/javascript">
window.buttonClick=function(e){
e=e||window.event;
alert(e.type);
return false;
}
</script>
现在我想知道如何获取事件对象?由于上面的代码会抛出错误:e is undefined
。
答案 0 :(得分:2)
不在内联事件中使用event
变量。
在这种情况下,buttonClick
是来自内联事件的函数,名为;被调用的函数没有对event
变量的神奇访问权限(window.event
是一个IE功能)。此外,在帖子中,使用0个参数调用buttonClick
,因此e
将始终评估为未定义。
在任何情况下,请与以下内容进行比较,以便从内联事件本身访问the special event
variable,然后将事件对象传递给“真实”事件处理函数:
<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
是个小问题:
在IE window.event
中,将评估事件对象并将其用作表达式的结果(以便event
)永远不会被评估。在非IE浏览器中,window.event
将评估为未定义(除非有人正在做一些非常糟糕的事情),因此结果将是event
变量的结果。
将此值反转为event||window.event
会导致浏览器(即IE)中的ReferenceError不支持W3C本地event
变量方法。
答案 1 :(得分:0)
假设您的代码完成了我认为的功能......您只需执行此操作:
<input type="button" value="Submit" onclick='buttonClick(window.event||event)' />