JavaScript如何识别事件对象变量?

Nat*_*end 3 javascript parameter-passing event-handling javascript-events

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

<button onclick='SendMessage(event)'></button>
Run Code Online (Sandbox Code Playgroud)

JavaScript是否因为我将其命名为"event"而传递了事件变量?如果是这样,为了传递事件变量,它保留了哪些其他变量名?(e?ev?等..)

如果是这种情况,可以通过命名本地或全局变量"event","e"等来涵盖它们吗?

提前感谢您满足我的好奇心!

小智 8

必须event在内联事件中调用它.event不是一个关键字,并且在JavaScript的保留字; 它只是早期Netscape工程师决定的变量名称.

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

function (event) {
   // the inline code
}
Run Code Online (Sandbox Code Playgroud)

IE使用该window.event属性传递事件信息,但名称重合,因此使用event将在适当时通过正常的JavaScript变量分辨率回退.

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

elm.onclick = function (my_event_name) {
    my_event_name ||= window.event // for IE
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

快乐的编码!


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

[内联事件,例如onclick,text]必须包含有效的JavaScript代码,在解析时,它将匹配[a function] production.

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