1

当从嵌入在锚元素中的脚本调用时,参数 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>

发生了什么?

4

2 回答 2

2

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

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

这是因为在兼容 W3 的浏览器中分配的函数看起来像这样:

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

所以事件参数将被传递。


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

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

所以全局window.event将被传递。

于 2013-03-16T18:54:41.360 回答
1

发生了什么?

您没有将任何内容传递给此处的 javascript 函数:

onclick="testOverrideClick()"

因此,您的函数崩溃是因为您尝试访问e从未传递的参数。

不用担心,您的第二个代码片段是正确的方法 - 不显眼且不混合 javascript 和 HTML。

于 2013-03-16T18:52:05.747 回答