(**RE-EDITED for substrings, to rename one function, and to give the optional useCapture bool for add/removeEventListeners**)
If the event is not registered with the element and you use either removeEventListener or detachEvent then nothing happens and you do not get an error. So you don't even need to check if the event and/or event function that is associated with the element is there to begin with. To sum things up, use the removeEventListener and the detachEvent as they are without any issues. If you want to see if the event and/or event function exists within the element without removing it, that is a different question and requires a little work...
Code:
//specifying the event type as "onevent" or "event" does not matter. The code accepts either.
function registerEvent(el, eventType, eventFunction, bool) {
if(eventType.indexOf("on")==0) eventType = eventType.substring(2,eventType.length);
if(bool==undefined) bool = false;
if(window.addEventListener) el.addEventListener(eventType, eventFunction, bool);
else el.attachEvent("on"+eventType, eventFunction);
if(!el.eventHolder) el.eventHolder = [];
el.eventHolder[el.eventHolder.length] = new Array(eventType, String(eventFunction));
}
function hasEvent(el, eventType, eventFunction) {
if(eventType.indexOf("on")==0) eventType = eventType.substring(2,eventType.length);
if(!el.eventHolder) return false;
for(var i=0; i<el.eventHolder.length; i++) {
if(el.eventHolder[i][0]==eventType && el.eventHolder[i][1]==String(eventFunction)) return true;
}
return false;
}
function unregisterEvent(el, eventType, eventFunction, bool) {
if(eventType.indexOf("on")==0) eventType = eventType.substring(2,eventType.length);
if(bool==undefined) bool = false;
if(!hasEvent(el, eventType, eventFunction)) return;
if(window.addEventListener) el.removeEventListener(eventType, eventFunction, bool);
else el.detachEvent("on"+eventType, eventFunction);
for(var i=0; i<el.eventHolder.length; i++) {
if(el.eventHolder[i][0]==eventType && el.eventHolder[i][1]==String(eventFunction)) {
el.eventHolder.splice(i, 1);
break;
}
}
}
Example:
Code:
var el = document.getElementById("myElement")
alert(hasEvent(el, "click", _1337n355)); //false
registerEvent(el, "click", _1337n355);
alert(hasEvent(el, "click", _1337n355)); //true
alert(hasEvent(el, "click", _notLeetness)); //false
alert(hasEvent(el, "mousedown", _1337n355)); //false
unregisterEvent(el, "click", _1337n355);
alert(hasEvent(el, "click", _1337n355)); //false
function _1337n355() {alert(1337+"!"+1+"11");}
function _notLeetness() {alert("!1337");}
Bookmarks