gpt4 book ai didi

javascript - 跨浏览器意外访问 "event"变量?

转载 作者:可可西里 更新时间:2023-11-01 02:09:57 26 4
gpt4 key购买 nike

首先让我说我知道下面的代码有一个主要问题。具体来说,event 参数不会传递到函数中。我不明白的是为什么在下面的代码中,Chrome、Opera、Safari、Firefox 和 IE 都以不同的方式处理 event 变量。

$('#eventBtn').on('click', function() {
console.log(event);
event.preventDefault();
});

在 Chrome、Opera 和 Safari 中,上述代码有效。 IE 在第二行失败,Firefox 立即失败。出于测试目的,我创建了一个稍微更漂亮的 jsFiddle .以上console.log(event)在各种浏览器中的输出:

Chrome Version 26.0.1410.64 m
MouseEvent {dataTransfer: null, toElement: button#superBtn, fromElement: null, y: 20, x: 33…}

Opera Version 12.15
MouseEvent

Safari Version 6.0.2 (8536.26.17)
MouseEvent

IE Version 10.0.9200.16540
[object MSEventObj]

Firefox Version 20.0.1
ReferenceError: event is not defined

我对 Chrome、Opera 和 Safari 的这个“功能”感到不满,因为它按预期工作,而不是按编码在其他浏览器中造成意外行为。虽然 IE 也有一个全局 event 变量,但与上述浏览器不同的是,它不会将该变量分配给当前正在触发的事件。 Firefox 没有全局 event 变量,因此一旦引用 event 就会失败。

通常我使用 e 来表示事件变量,正如预期的那样,它在所有浏览器中都以相同的方式失败。为什么 Chrome、Opera 和 Safari 有一个以这种方式分配的全局 event 变量?这种行为是否记录在某处?除了不要使用 event 来命名变量之外,还有什么处理这个“特性”的建议吗?

最佳答案

IE 始终提供全局 event 变量,这与 W3C 标准规定的不同。其他浏览器也在做同样的事情,以便向后兼容使用旧版 IE 开发的网站。

While IE also has a global event variable, unlike the aforementioned browsers it does not assign that variable to the event that is currently firing.

我相信是的。

关于javascript - 跨浏览器意外访问 "event"变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com