На самом деле это не так сложно - не так много определений событий, только три версии. Первый - основной (addEventListener
), затем есть путь IE (attachEvent
), а затем есть способ совместимости с более старым браузером (element.onevent = function
)
Таким образом, полное решение для обработки событий будет выглядеть примерно так:
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;
}
}
и очистить события:
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;
}
}
и пример:
setEvent(document, "click", function(){alert('hello world!');});
clearEvent(document, "click", function(){alert('hello world!');});
Это на самом деле не полный пример, хотя обработчик совместимости всегда перезаписывает предыдущие события (это не добавление действий, а перезапись), так что вы, возможно, захотите проверить, установлен ли обработчик, и затем сохранить его во некоторой временной переменной и запустите его внутри функции обработчика событий.