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

时间:2013-04-30 18:20:10

标签: javascript events cross-browser

首先我要说明白以下代码存在一个重大问题。具体来说,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版本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版本10.0.9200.16540
    [对象MSEventObj]

     

Firefox版本20.0.1
    ReferenceError:未定义事件

我对Chrome,Opera和Safari的这个“功能”感到满意,因为它的工作原理并非编码,而是在其他浏览器中创建了意外行为。虽然IE也有一个全局event变量,但与前面提到的浏览器不同,它并没有将该变量赋给当前正在触发的事件。 Firefox没有全局event变量,因此只要引用event就会失败。

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

1 个答案:

答案 0 :(得分:6)

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

  

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

我相信它确实如此。