Onclick против addEventListener

I'm little confusing by using "onclick" "onmousedown" as a property of HTML elements.

Такие как:

<button onclick="my_JS_function()"></button>

or

<div onmousedown="my_another_JS_funciton"></div>

Но некоторые люди говорят, что единственный "правильный" способ добавления "слушателей" - это

document.getElementById("my_id").addEventListener("onclick", my_JS_function, false);

Каков более «правильный» более поддерживаемый способ сделать это?


person Paul Brewczynski    schedule 03.01.2013    source источник


Ответы (2)


если вы уже знаете, что функция и элемент являются частью html, т.е. не добавляются динамически, чем хорошо, что вы добавляете встроенную функцию, а не используете дополнительный вызов метода, например "addEventListener"

Еще одно замечание

В то время как onclick работает во всех браузерах, addEventListener не работает в более старых версиях Internet Explorer, где вместо этого используется attachEvent.

OnClick — это свойство DOM Level 0. AddEventListener является частью определения DOM Level 2. Прочтите об этом: http://www.w3.org/TR/DOM-Level-2-Events/events.html

встроенные обработчики событий, добавленные как атрибуты тега HTML, например:

 <a href="gothere.htm" onlick="alert('Bye!')">Click me!</a> 

Приведенные выше методы просты, но имеют определенные недостатки: они позволяют вам иметь только один обработчик событий для каждого элемента. Кроме того, со встроенными обработчиками событий вы очень плохо отделяете код JavaScript от разметки HTML.

document.getElementById("my_id").addEventListener("onclick", my_JS_function, false);

Преимущество этого: вы можете добавить несколько обработчиков событий. также отдельный код html и javascript

Подробнее см. здесь: Добавление обработчика событий

person Pranay Rana    schedule 03.01.2013
comment
и при отладке или обслуживании такого приложения его обработчик логически связан с кнопкой, поскольку он объявлен встроенным. В этом случае встроенное объявление упрощает реализацию и обслуживание. Нет необходимости выяснять, связаны ли с ним другие события. Пожалуйста, объясните еще раз, в этом случае, в чем преимущество разделения html и javascript? - person Schien; 20.01.2014

Последний (addEventListener()) — лучший способ, так как вы можете прикрепить несколько событий одного типа к одному и тому же элементу.

Назначая onclick и т. д., вы перезаписываете существующие обработчики.

person alex    schedule 03.01.2013
comment
Но я могу сделать функцию, которая вызывает другие функции... чтобы обойти проблему onclick. - person Paul Brewczynski; 03.01.2013
comment
@alex в jquery addEventListener() выдает ошибку Uncaught TypeError: Object [object Object] не имеет метода addEventListener ?? что делать? - person anam; 13.06.2013
comment
@simmisimmi Если у вас есть вопрос, вы можете задать его. - person alex; 13.06.2013