首页
Firefox不支持event的解决方法

FF中不存在event对象,只能通过传递参数(并且唯一)的方式来实现 event

Event对象的两种获取方式

1. 在事件处理函数中,如果传入了 event 对象,那么所有的浏览器都可以使用,即:

function test(e){
    e.stopPropagation();
}
//调用时带上参数
onclick="test(event);"

2. 如果事件处理函数中,未通过参数传入 event ,那么 Chrome 和 IE 下可通过 window.event 获取 event 对象,而Firefox不可以,需要用 arguments.callee.caller.arguments[0] 来获取 event 对象。

若开启了严格模式 "use strict"; arguments 不会再提供访问与调用这个函数相关的变量的途径,则 arguments.callee/caller 等将被禁止,即 Firefox 无法获取 event 了。因此建议使用第一种

实现getEvent方法

  • 通过参数传递,调用时须传递参数
function getEvent(e){  
   return e || window.event;
}

  • 通过 arguments.callee 实现,非严格模式才能使用
function getEvent() {
   var _event;
   if (window.event == undefined) {
       caller = arguments.callee;
       while (caller.caller != null) {
           caller = caller.caller;
       }
       _event = caller.arguments[0];
   }
   else{
      _event = window.event;
   }
   return _event;
}

参考文档