1

假设我内联添加事件处理程序,使用onclick元素的属性,如下所示:

<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.

4

2 回答 2

2

不是在内联事件中使用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。

于 2012-09-27T05:57:45.453 回答
0

假设您的代码执行我认为的操作..您只需执行以下操作:

<input type="button" value="Submit" onclick='buttonClick(window.event||event)' />
于 2012-09-27T05:55:39.350 回答