跨浏览器意外访问"事件"变量?

ahs*_*ele 12 javascript events cross-browser

首先让我说,我理解下面的代码有一个重大问题.具体来说,event参数不会传递给函数.我不明白为什么在下面的代码中Chrome,Opera,Safari,Firefox和IE都会以event不同的方式处理变量.

$('#eventBtn').on('click', function() {
    console.log(event);
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

在Chrome,Opera和Safari中,上述代码可以正常运行.IE在第二行失败,Firefox立即失败.出于测试目的,我创建了一个稍微更加装饰的jsFiddle.以上console.log(event)各种浏览器的输出:

Chrome版本26.0.1410.64 m
MouseEvent {dataTransfer:null,toElement:button#superBtn,fromElement:null,y:20,x:33 ...}

Opera版本12.15
MouseEvent

Safari Version 6.0.2(8536.26.17)
MouseEvent

IE版本10.0.9200.16540
[对象MSEventObj]

Firefox版本20.0.1
ReferenceError:未定义事件

我有点喜欢Chrome,Opera和Safari的这个"功能",因为它的工作原理不像其他浏览器中的编码创建意外行为.虽然IE也有一个全局event变量,但与上述浏览器不同,它不会将该变量赋值给当前正在触发的事件.Firefox没有全局event变量,因此一旦event引用就会失败.

通常,我e用于表示事件变量,这些变量在所有浏览器中按预期失败的方式相同.为什么Chrome,Opera和Safari都有这样一个全局event变量?这种行为是否记录在某处?除了不使用event变量命名任何处理这个"功能"的建议?

bfa*_*tto 6

IE总是提供一个全局event变量,与W3C标准所规定的不同.其他浏览器也在做同样的事情,以便向使用旧IE版本开发的网站提供向后兼容性.

虽然IE也有一个全局事件变量,但与前面提到的浏览器不同,它不会将该变量分配给当前正在触发的事件.

我相信它确实如此.