欢迎来到福编程网,本站提供各种互联网专业知识!

window.addeventjs事件驱动函数集合addEvent等

发布时间:2008-02-19 作者: 来源:转载
addEvent()、removeEvent()、handleEvent()、fixEvent()[
//writtenbyDeanEdwards,2005
//withinputfromTinoZijdel,MatthiasMiller,DiegoPerini

//http://dean.edwards.name/weblog/2005/10/add-event/

functionaddEvent(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else{
//assigneacheventhandlerauniqueID
if(!handler.$$guid)handler.$$guid=addEvent.guid++;
//createahashtableofeventtypesfortheelement
if(!element.events)element.events={};
//createahashtableofeventhandlersforeachelement/eventpair
varhandlers=element.events[type];
if(!handlers){
handlers=element.events[type]={};
//storetheexistingeventhandler(ifthereisone)
if(element["on"+type]){
handlers[0]=element["on"+type];
}
}
//storetheeventhandlerinthehashtable
handlers[handler.$$guid]=handler;
//assignaglobaleventhandlertodoallthework
element["on"+type]=handleEvent;
}
};
//acounterusedtocreateuniqueIDs
addEvent.guid=1;

functionremoveEvent(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else{
//deletetheeventhandlerfromthehashtable
if(element.events&&element.events[type]){
deleteelement.events[type][handler.$$guid];
}
}
};

functionhandleEvent(event){
varreturnValue=true;
//grabtheeventobject(IEusesaglobaleventobject)
event=event||fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);
//getareferencetothehashtableofeventhandlers
varhandlers=this.events[event.type];
//executeeacheventhandler
for(variinhandlers){
this.$$handleEvent=handlers[i];
if(this.$$handleEvent(event)===false){
returnValue=false;
}
}
returnreturnValue;
};

functionfixEvent(event){
//addW3Cstandardeventmethods
event.preventDefault=fixEvent.preventDefault;
event.stopPropagation=fixEvent.stopPropagation;
returnevent;
};
fixEvent.preventDefault=function(){
this.returnValue=false;
};
fixEvent.stopPropagation=function(){
this.cancelBubble=true;
};

相关推荐