diff options
Diffstat (limited to 'js/lib_event.js')
-rwxr-xr-x | js/lib_event.js | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/js/lib_event.js b/js/lib_event.js index f8482402d09..f44a2049fb2 100755 --- a/js/lib_event.js +++ b/js/lib_event.js @@ -17,33 +17,80 @@ document.events.functions=Array(); document.events.args=Array(); document.events.add=function(element,type,func,args){ + if(!element.eventCallBacks){ + element.eventCallBacks=Array(); + } + if(!element.eventCallBacks[type]){ + element.eventCallBacks[type]=Array(); + } if(args){ - if(typeof args!='object' && typeof args!='Object'){ + if(!args.push){ args=[args]; } } if(!args){ args=Array(); } + args.push('eventHolder'); + args.push('argHolder'); if (type && element){ //wrap the function in a function, otherwise it won't work if func is actually a callBack var funcId=document.events.functions.length; document.events.functions[funcId]=func; document.events.args[funcId]=args; - eval('callback=function(event){result=document.events.functions['+funcId+'].apply(this,document.events.args['+funcId+']);if(result===false){if(event.preventDefault){event.preventDefault();}}};'); + eval('var callback=function(event,arg){document.events.callback.call(this,'+funcId+',event,arg)};'); + element.eventCallBacks[type].push(callback); if(element.addEventListener){ var eventType=type; if(eventType.substr(0,2)=='on'){ eventType=eventType.substr(2); } element.addEventListener(eventType,callback,false); - }else{ + }else if(element.attachEvent){ element.attachEvent(type,callback); } + return callback; + } +} +document.events.remove=function(element,type,func){ + if(element.removeEventListener){ + if(type.substr(0,2)=='on'){ + type=type.substr(2); + } + element.removeEventListener(type,func,false); + }else if(element.detachEvent){ + element.detachEvent(type,func) + } +} + +document.events.callback=function(funcId,event,arg){ + if(!event)var event=window.event; + var args=document.events.args[funcId]; + args[args.length-2]=event; + args[args.length-1]=arg; + result=document.events.functions[funcId].apply(this,args); + if(result===false){ + if(event.preventDefault){ + event.preventDefault(); + }; + } + return result; +} + +document.events.trigger=function(element,type,event,args){ + var callbacks=element.eventCallBacks[type]; + for(var i=0;i<callbacks.length;i++){ + callbacks[i].call(element,event,args); } } Node.prototype.addEvent=function(type,func,arguments){ - document.events.add(this,type,func,arguments); + return document.events.add(this,type,func,arguments); +} +Node.prototype.removeEvent=function(type,func){ + document.events.remove(this,type,func); +} +Node.prototype.triggerEvent=function(type,event,arg){ + return document.events.trigger(this,type,event,arg); }
\ No newline at end of file |