No es tan difícil en realidad, no hay tantas definiciones de eventos, solo tres versiones. La primera de ellas es la corecta (addEventListener
), entonces no es la forma en IE (attachEvent
) y luego está la forma en la compatibilidad de navegador antiguo (element.onevent = function
)
Así que una solución de gestión de eventos completa sería algo como esto:
setEvent = function(element, eventName, handler){
if('addEventListener' in element){
//W3
element.addEventListener(eventName,handler,false);
}else if('attachEvent' in elm){
//IE
elm.attachEvent('on'+eventName,handler)
}else{
// compatibility
elm['on'+eventName] = handler;
}
}
y para borrar eventos:
clearEvent = function(element, eventName, handler){
if('removeEventListener' in element){
//W3
element.removeEventListener(eventName,handler,false);
}else if('detachEvent' in elm){
//IE
elm.detachEvent('on'+eventName,handler)
}else{
// compatibility
elm['on'+eventName] = null;
}
}
y un ejemplo:
setEvent(document, "click", function(){alert('hello world!');});
clearEvent(document, "click", function(){alert('hello world!');});
Esto no es realmente un ejemplo completo, ya que el controlador de compatibilidad siempre sobrescribe los eventos anteriores (no se añaden acciones, se sobrescribe) por lo que probablemente desee comprobar si un controlador ya está configurado y luego guardarlo en alguna variable temporal y dispararlo dentro de la función del controlador de eventos.
Puede construye tu propio. Es muy simple, JS puro y no requiere un DOM - verifique mi respuesta aquí: https://stackoverflow.com/questions/31110706/write-a-custom-event-dispatcher-in-javascript/42751577?noredirect=1# answer-42751577 –