Текущее популярное мнение состоит в том, что все должно быть ненавязчивым, а это означает, что свойства обработчика событий, такие как someElement.onclick = function(e) { ... };
, широко осуждаются, а атрибуты обработчика событий, такие как <input type="button" onclick="doSomething()">
, полностью игнорируются. На самом деле, есть допустимые применения для обоих.
Желание отделить поведение (такое как обработчики событий) от содержимого является естественным и важным, но не единственным соображением. Как показано в сводке ниже, у трех методов создания обработчиков событий есть свои преимущества и недостатки, и в конкретной ситуации разделение поведения и содержимого может не иметь решающего значения.
В заключение, для данной задачи используйте самый простой метод, который соответствует вашим потребностям.
Свойства обработчика событий
Пример
myElement.onclick = function(e) { alert("Clicked"); };
Они особенно полезны для назначения обработчика событий элементу, который вы создаете в сценарии, и наверняка потребуется только один слушатель.
Преимущества
- Отделяет поведение от контента
- Работает во всех скриптовых браузерах
- Работает одинаково во всех браузерах, за исключением вопроса о том, откуда берется объект Event (
window.event
в IE, параметр функции в других браузерах).
- Универсально поддерживаемый метод предотвращения поведения браузера по умолчанию с помощью
return false
Недостатки
- Разрешает только одного слушателя для определенного объекта и события
- Для элементов в исходном коде HTML обработчики обычно не назначаются до тех пор, пока документ не будет загружен.
Атрибуты обработчика событий
Пример
<input type="button" value="test" onclick="alert('Clicked');">
Это единственный подход, который работает, когда важно, чтобы элемент реагировал на событие до завершения загрузки документа (см. все еще" rel="nofollow noreferrer">http://peter.michaux.ca/articles/the-window-onload-problem-still для более подробного обсуждения этого вопроса). Кроме того, это самый простой способ добавить обработчики событий.
Преимущества
- Работает во всех скриптовых браузерах
- Работает одинаково во всех браузерах
- Работает, как только элемент визуализируется
- Самый простой способ добавить обработчик событий
- Универсально поддерживаемый метод предотвращения поведения браузера по умолчанию с помощью
return false
- На очень простой странице это самый читаемый метод
- Стандартизирован в спецификации HTML 4
Недостатки
- Смешивает поведение с содержанием
- Разрешает только одного слушателя для определенного объекта и события
addEventListener/attachEvent
Пример (аналог attachEvent не показан)
myElement.addEventListener("click", function(e) { alert("Clicked"); }, false);
Это единственный метод, позволяющий прикрепить несколько слушателей к конкретному событию на конкретном объекте. addEventListener
стандартизирован в спецификации событий DOM Level 2.
Преимущества
- Отделяет поведение от контента
- Позволяет прослушивать несколько событий
addEventListener
— это современный стандарт, поддерживаемый в IE 9, что означает, что все текущие основные браузеры будут поддерживаться после выпуска IE 9.
Недостатки
- Немного сложно реализовать правильно кроссбраузерно
attachEvent
в IE не совсем эквивалентно addEventListener
- Для элементов в исходном коде HTML обработчики обычно не назначаются до тех пор, пока документ не будет загружен.
person
Tim Down
schedule
23.08.2010