最近用到JavaScript事件处理机制,找了些资料。
以前写JavaScript程序时,事件都是采用
复制代码 代码如下:
object.event=handler;
的方式初始化。这种方式对于InternetExplorer、Mozilla/Firefox和Opera来说很通用。但是有一个问题就是,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执行多个处理过程就不好用了。
但是InternetExplorer从5.0开始提供了一个attachEvent方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent对于目前的Opera也适用。但是问题是Mozilla/Firefox并不支持这个方法。但是它支持另一个addEventListener方法,这个方法跟attachEvent差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在attachEvent方法中,事件是以“on”开头的,而在addEventListener中,事件没有开头的“on”,另外addEventListener还有第三个参数,一般这个参数指定为false就可以了。
因此要想在你的程序中给一个事件指派多个处理过程的话,只要首先判断一下浏览器,然后根据不同的浏览器,选择使用attachEvent还是addEventListener就可以了。实例如下:
复制代码 代码如下:
if(document.all){
window.attachEvent('onload',handler1);
window.attachEvent('onload',handler2);
}
else{
window.addEventListener('load',handler1,false);
window.addEventListener('load',handler2,false);
}
注意:attachEvent所指派的多个过程的执行顺序是随机的,所以这几个过程之间不要有顺序依赖。另外attachEvent和addEventListener不仅仅适用于window对象,其他的一些对象也支持该方法。
复制代码 代码如下:
functionaddEvent(obj,evenTypeName,fn){
if(obj.addEventListener){
obj.addEventListener(evenTypeName,fn,true);
returntrue;
}elseif(obj.attachEvent){
returnobj.attachEvent("on"+evenTypeName,fn);
}else{
returnfalse;
}
}