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

标签 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>

发生了什么事?

最佳答案

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会被传递。

关于javascript - 是什么决定了一个事件是否传递给了我在 javascript 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453224/

相关文章:

javascript - 启动 .bat 或 .exe 客户端

javascript - 原型(prototype)未按预期工作

javascript - 使用 jquery 触发 .has-error 类的 Bootstrap

wpf - 在 WPF DataGrid 中实现编辑和双击 (MouseDoubleClick)。

angular - Ionic 2/Angular 2 组件生命周期钩子(Hook)

javascript - 仅使用 javascript 添加 onclick 事件

javascript - 使用 require 的库结构

javascript - array push 函数向数组中添加一个空索引

javascript - 将 ListView 中的 ID 存储在 localStorage 中

jquery - 将子菜单的宽度和位置与页面容器同步