关于JavaScript事件对象的快速问题 - 当我尝试将事件变量传递给函数时,JavaScript如何知道?例如,当我像这样定义一个onclick处理程序时:
<button onclick='SendMessage(event)'></button>
JavaScript是否仅仅因为我将其命名为“event”而传递了事件变量?如果是这样,为了传递事件变量,它保留了哪些其他变量名? (e?ev?等..)
如果是这种情况,是否可以通过命名本地或全局变量“event”,“e”等来涵盖它们。?
提前感谢您满足我的好奇心!
答案 0 :(得分:6)
必须在内联事件中调用event
。 event
不是一个关键字,并且不是 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: Event Handlers, Event handler content attributes中详细介绍了此行为:
[内联事件,例如onclick,text]必须包含有效的JavaScript代码,在解析时,它将匹配[函数]生产..
使用上面创建的脚本执行环境,创建一个函数对象。让函数有一个名为event 的参数。