是什么决定了事件是否在javascript中传递给我的函数?

时间:2013-03-16 18:48:14

标签: javascript html events

当从嵌入在anchor元素中的脚本调用时,参数e将是未定义的。

function testOverrideClick(e) {
    console.log(e);
    e.preventDefault();          
}

....

<body onload="afterLoad();">
<a id="testAnchor" href="http://www.google.com" onclick="testOverrideClick()">test link</a>

但是,如果我从脚本注册事件处理程序,则e将有效:

function afterLoad() {
      document.getElementById("testAnchor").onclick = testOverrideClick;
}

...

<a id="testAnchor" href="http://www.google.com">test link</a>

发生了什么事?

2 个答案:

答案 0 :(得分:2)

event标识符传递给您的函数。

<a id="..." href="..." onclick="testOverrideClick(event)">test link</a>

这是有效的,因为符合W3标准的浏览器中分配的功能如下所示:

elem.onclick = function(event) {
    testOverrideClick(event);
}

因此将传递event参数。


在旧IE中,它看起来更像是这样:

elem.onclick = function() {
    testOverrideClick(event);
}

因此全局window.event将被传递。

答案 1 :(得分:1)

  

发生了什么事?

你没有在这里向javascript函数传递任何内容:

onclick="testOverrideClick()"

因此,您的函数崩溃是因为您尝试访问永远不会传递的e参数。

别担心,您的第二个代码段是正确的方法 - 不引人注意且不混合使用javascript和HTML。