javascript – 跨浏览器意外访问“事件”变量?

让我开始说我明白下面的代码一个重大的问题.具体来说,事件参数不会传递到函数中.我不明白的是为什么在下面的代码中,Chrome,Opera,Safari,Firefox和IE都以不同的方式处理事件变量.
$('#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还有一个全局事件变量,但与上述浏览器不同,它不会将该变量分配给当前正在触发的事件. Firefox没有全局事件变量,因此一旦引用事件就会失败.

通常我使用e表示事件变量,如预期的那样在所有浏览器中都会失败.为什么Chrome,Opera和Safari具有这样分配的全局事件变量?这个行为是否记录在某个地方?除了不要使用事件变量命名任何建议来处理这个“功能”?

解决方法

IE一直提供一个全局事件变量,与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.

我相信它.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...