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 ниво 0. AddEventListener е част от дефиницията на DOM ниво 2. Прочетете за това: http://www.w3.org/TR/DOM-Level-2-Events/events.html

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

 <a href="/bggothere.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] няма метод 'addEventListener' ?? какво да правя? - person anam; 13.06.2013
comment
@simmisimmi Ако имате въпрос, можете да го зададете. - person alex; 13.06.2013