6

关于 JavaScript 事件对象的快速问题 - JavaScript 如何知道我何时尝试将事件变量传递给函数?例如,当我onclick像这样定义一个处理程序时:

<button onclick='SendMessage(event)'></button>

JavaScript 是否仅仅因为我将它命名为“事件”而传递事件变量?如果是这样,它为传递事件变量保留了哪些其他变量名称?(例如?ev?等等。)

如果是这种情况,可以通过命名局部或全局变量“event”、“e”等来覆盖它们吗?

4

1 回答 1

12

必须在内联事件中调用eventevent不是关键字,也不是 JavaScript的保留字;它只是早期 Netscape 工程师决定的变量名。

为事件提供的内联文本有效地将1包装 为:

function (event) {
   // the inline code
}

IE 使用该window.event属性来传递事件信息,但名称一致,因此使用event将酌情通过正常的 JavaScript 变量解析回退。

当然,如果直接附加一个函数对象,那么事件变量,因为它只是第一个参数,可以任意命名。不幸的是,IE 的window.event方法也必须处理,并且调用参数event并不能解决它。

elm.onclick = function (my_event_name) {
    my_event_name ||= window.event // for IE
    ...
}

(我建议尽可能避免内联事件并使用统一/简化事件的库。)

快乐编码!


1 HTML 5:事件处理程序,事件处理程序内容属性中详细介绍了此行为:

[内联事件,例如 onclick、文本] 必须包含有效的 JavaScript 代码,该代码在解析时将匹配 [a function] 生产..

使用上面创建的脚本执行环境,创建一个函数对象 .. 让函数有一个名为 event 的参数

于 2012-06-29T16:56:54.490 回答