天天看点

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

我在做[url="http://www.mending.cn/jskit/doc/index.html"]Jskit.org[/url](一套自己的javascript工具包)的时候,绑定事件,或者触发事件绑定的方法,都是在方法内使用event的,但是用到firefox的时候发现firefox没有这个全局的event,只有在事件发生之后才会出现event对象。我使用了如下的方式来解决:

[code]//首先,定义一个全局的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");

//该方式还可以给绑定事件传递参数,只不过暂时我还没有用到,所以没写那么多。

[/code]

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

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

JavaEye我是刚刚才知道的,看文章的时候看着看着就蹦出来一个不知道的新名词。唉,为什么老是出来新东西来残害老年人的智商。