Использование обоих схоже, хотя оба имеют немного другой синтаксис для параметра события:
addEventListener ( ссылка mdn ):
obj.addEventListener('click', callback, false);
function callback(){ /* do stuff */ }
Список событий для addEventListener
.
obj.attachEvent('onclick', callback);
function callback(){ /* do stuff */ }
Список событий для attachEvent
.
Аргументы
Для обоих методов аргументы имеют следующий вид:
1. Является ли тип события.
2. Функция, вызываемая один раз для событиябыл запущен.
3. (только addEventListener
) Если true, указывает, что пользователь желает инициировать capture .
Объяснение
Оба метода используются для достижения одной и той же цели присоединения события к элементу.
Разница в том, что attachEvent
можно использовать только на старых trident движках рендеринга ( IE5 + IE5-8 *) и addEventListener
- это стандарт W3, который реализован в большинстве других браузеров (FF, Webkit, Opera, IE9 +).
Дляподдержка кросс-браузерных событий, включая нормализации, которые вы не получите с помощью решения Diaz, используйте framework .
* IE9-10 поддерживает оба метода для обратной совместимости.
Спасибо Люку Пуплетту за то, что он указал, что attachEvent
был удален из IE11.
Минимальная кросс-браузерная реализация
Как Smitty рекомендовал васследует взглянуть на это Dustin Diaz addEvent для надежной кросс-браузерной реализации без использования фреймворка:
function addEvent(obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
}
else if (obj.attachEvent) {
obj["e"+type+fn] = fn;
obj[type+fn] = function() {obj["e"+type+fn](window.event);}
obj.attachEvent("on"+type, obj[type+fn]);
}
else {
obj["on"+type] = obj["e"+type+fn];
}
}
addEvent( document, 'click', function (e) {
console.log( 'document click' )
})