Can somebody tell how to "unbind" an anonymous function?
In jQuery it’s capable to do that, but how can I implement this Functionality in my own script.
This is the scenario:
The following code attach a onclick event to the Div which have someDivId as ID, now when you click the DIV, it’s showing ‘clicked!’.
var a = document.getElementById('someDivId');
bindEvent(a,'click',function(){alert('clicked!');});
That’s all great, the problem is how to "un-attach" the Function to the DIV if the function is anonymous or how to "un-attach" all attached events to the ‘a’ Element?
unBind(a,'click'); //Not necessarily the given params, it's just an example.
This is the code for bindEvent Method:
function bindEvent (el,evtType,fn){
if ( el.attachEvent ) {
el['e'+evtType+fn] = fn;
el[evtType+fn] = function(){
fn.call(el,window.event);
}
el.attachEvent( 'on'+evtType, el[evtType+fn] );
} else {
el.addEventListener( evtType, fn, false );
}
}
Finally, and after hours of Test&Errors i have found a solution, maybe it’s not the best or most efficient but… IT WORKS! (Tested on IE9, Firefox 12, Chrome 18)
First all I’v create two cross-browser and auxiliary addEvent() and removeEvent() methods. (Idea taken from Jquery’s source code!)
Also we need some kind of ‘container’ to store the attached events to elements, like this:
And finally the two callable and exposed to the users Methods:
The next one to add an Event(event) and associate this Event to a Method (handler) for a specific Element (el).
Lastly the method that un-attach every pre-attached events (event) for an specific Element (el)
By the way, to call this methods you must do the following:
Capture a DOM Node
Call the method ‘bindEvent()’ with the corresponding parameters.
And to de-attach it:
That’s all, hope will be useful for somebody one day.