当从嵌入在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>
发生了什么事?
答案 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。