处理firefox不支持window.event的问题

 我在做 Jskit.org(一套自己的javascript工具包)的时候,绑定事件,或者触发事件绑定的方法,都是在方法内使用event的,但是用到firefox的时候发现firefox没有这个全局的event,只有在事件发生之后才会出现event对象。我使用了如下的方式来解决:
Java代码
//首先,定义一个全局的event   
  1. if( typeof(window.event)=="undefined" ){   
  2.     eval("var event = new Object;");   
  3. }   
  4. // Firefox Event << IE Event    
  5. // bind ie's methods on firefox   
  6. function jskitFFEvent(e){   
  7.     if( typeof(document.all)=="undefined" ){   
  8.         event = e;   
  9.         event.srcElement = e.target;   
  10.     }   
  11.     return true;   
  12. };   
  13.   
  14. //然后在绑定事件的地方:   
  15. if ( typeof(document.all)=="undefined" ) {//for Firefox   
  16.     var _eventName = rName.replace(/on(.*)/i,'$1');   
  17.     eval("_bk = rObj.addEventListener(\""+_eventName+"\", function(){jskitFFEvent(event);"+rHandler+"();}, true);");   
  18. else{//for IE   
  19.     eval("_bk = rObj.attachEvent(\""+rName+"\","+ rHandler+");");   
  20. }   
  21. //这里rHandler是传递过来的方法名   
  22. //调用的方式形如:   
  23. jskitEvents.add(myElement,"onclick","myClass.onclick");   
  24. //该方式还可以给绑定事件传递参数,只不过暂时我还没有用到,所以没写那么多。  
//首先,定义一个全局的event
if( typeof(window.event)=="undefined" ){
	eval("var event = new Object;");
}
// Firefox Event << IE Event 
// bind ie's methods on firefox
function jskitFFEvent(e){
	if( typeof(document.all)=="undefined" ){
		event = e;
		event.srcElement = e.target;
	}
	return true;
};

//然后在绑定事件的地方:
if ( typeof(document.all)=="undefined" ) {//for Firefox
	var _eventName = rName.replace(/on(.*)/i,'$1');
	eval("_bk = rObj.addEventListener(\""+_eventName+"\", function(){jskitFFEvent(event);"+rHandler+"();}, true);");
} else{//for IE
	eval("_bk = rObj.attachEvent(\""+rName+"\","+ rHandler+");");
}
//这里rHandler是传递过来的方法名
//调用的方式形如:
jskitEvents.add(myElement,"onclick","myClass.onclick");
//该方式还可以给绑定事件传递参数,只不过暂时我还没有用到,所以没写那么多。


使用了这样的方式之后,以前在函数内用的event.srcElement都不想要在改动了。我想类似的方式也能解决其他firefox与ie兼容的问题吧,把对象重构,把不兼容的地方抽出来之前解决,做一个对应的转换,以后的代码都不需要再做修改或者不用每次都要做两态判断的处理(后一种情况让我非常头疼)。

我现在做的工作是不要在页面中(主要是标签中)写任何js代码,所有的js脚本都通过配置和部署来应用,让js自己来判断该去绑定谁,该去执行什么,页面只负责src的引用。

JavaEye我是刚刚才知道的,看文章的时候看着看着就蹦出来一个不知道的新名词。唉,为什么老是出来新东西来残害老年人的智商
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值