首先我要说明白以下代码存在一个重大问题。具体来说,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
的MouseEventSafari Version 6.0.2(8536.26.17)
的MouseEventIE版本10.0.9200.16540
[对象MSEventObj]Firefox版本20.0.1
ReferenceError:未定义事件
我对Chrome,Opera和Safari的这个“功能”感到满意,因为它的工作原理并非编码,而是在其他浏览器中创建了意外行为。虽然IE也有一个全局event
变量,但与前面提到的浏览器不同,它并没有将该变量赋给当前正在触发的事件。 Firefox没有全局event
变量,因此只要引用event
就会失败。
通常我使用e
来表示事件变量,这些变量在所有浏览器中都以相同的方式失败。为什么Chrome,Opera和Safari都有这样的全局event
变量?这种行为是否记录在某处?除了不使用event
变量命名任何处理这个“功能”的建议?
答案 0 :(得分:6)
IE总是提供全局event
变量,与W3C标准所规定的不同。其他浏览器也在做同样的事情,以便向使用旧IE版本开发的网站提供向后兼容性。
虽然IE也有一个全局事件变量,但与上述浏览器不同,它不会将该变量分配给当前正在触发的事件。
我相信它确实如此。