【问题标题】:How does JavaScript recogize event object variables?JavaScript 如何识别事件对象变量?
【发布时间】:2012-06-29 16:53:08
【问题描述】:

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

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

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

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

【问题讨论】:

  • 它只是碰巧将它作为第一个参数传入,它不知道你叫什么变量。 Javascript 在验证函数签名时没有参数类型,甚至没有检查参数,因为你不能使用函数重载。
  • @TheZ 这不正确。 event 在这种情况下是一个关键字,它不能与其他任何东西一起使用。现在在您的函数中,您可以为参数命名任何您想要的名称。 DEMO
  • 无论如何都不是关键字。将其称为“隐式参数”或更合适的名称?

标签: javascript event-handling dom-events parameter-passing


【解决方案1】:

必须在内联事件中被称为eventeventnot 关键字并且是 not 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
    ...
}

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

编码愉快!


1HTML 5: Event Handlers, Event handler content attributes 中详细介绍了此行为:

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

使用上面创建的脚本执行环境,创建一个函数对象..让函数有一个单独的参数称为事件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多