首先让我说我知道下面的代码有一个主要问题。具体来说,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 版本 12.15
鼠标事件Safari 版本 6.0.2 (8536.26.17) 鼠标
事件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
变量命名来处理这个“特性”之外还有什么建议吗?