Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   в каких случаях используется addEventListener? (https://javascript.ru/forum/events/48576-v-kakikh-sluchayakh-ispolzuetsya-addeventlistener.html)

foo 09.07.2014 05:21

в каких случаях используется addEventListener?
 
Я часто вижу в коде сабж с параметром "click", например. Но ведь есть свойство onclick. В каких, вообще случаях необходимо навешивать сабж? Какие у него преимущества перед onclick, onload и прочими?

Aetae 09.07.2014 05:57

Простой ответ: listener'ов навешать можно сколько угодно, а on - только один.
Сложный ты не поймёшь всё равно.

foo 09.07.2014 13:16

Цитата:

Сообщение от Aetae
Сложный ты не поймёшь всё равно.

Давай сложный

foo 09.07.2014 14:18

Aetae,
написал такой вот код:

div=document.createElement("div")
div.innerHTML="foo"
div.onclick=function(){this.innerHTML="bar"}
div.onmouseout=function(){this.innerHTML="foo"}
document.body.appendChild(div)

Все работает прекрасно. Не подтвердилась твоя версия.

Hatchet 09.07.2014 14:23

а выполнить несколько функций по одному клику?

foo 09.07.2014 14:55

Hatchet,

fu1=function(){console.log(1)}
fu2=function(){console.log(2)}
fu3=function(){console.log(3)}

all=function(){fu1(); fu2(); fu3()}

div=document.createElement("div")
div.innerHTML="foo"
div.onclick=all
document.body.appendChild(div)

hfts_rider 09.07.2014 15:07

Я тоже задаюсь этим вопросом.
Как по мне без разницы.
И вроде бы привилегий никаких нету.

BETEPAH 09.07.2014 15:12

foo,
еще допишите добавление функций к событию и можно фреймворк патентовать :)
Ценность addEventListener понятна из названия - add, слышите?

foo 09.07.2014 15:15

Цитата:

Сообщение от BETEPAH
слышите?

Я слышу, но смысла не вижу. Я не спрашивал как называется. Я говорю: чем отличается?

Erolast 09.07.2014 15:19

Тебе ответили. Тем, что позволяет провесить неограниченное количество обработчиков, не используя функцию-прокладку.

foo 09.07.2014 15:27

Erolast,
Иными словами -- ничем.

BETEPAH 09.07.2014 15:59

Цитата:

Сообщение от foo
Я говорю: чем отличается?

Вы работали над проектами, состоящими больше одной страницы?
А параллельно с другими людьми?
Неужели до сих пор отличие не понятно стало? Название намекает, но, похоже, Вам нужно разжевывать.
Представьте ситуацию: нужно на клик повесить работу скрипта. Если повесите через onclick, через полчаса позвонит коллега и обматерит, что перестал работать его скрипт, который висел на этом элементе. И начнете вместе сооружать прокладки, объединяющие функции.

Или это такой троллинг, спрашивать про очевидные вещи?

BETEPAH 09.07.2014 16:00

Цитата:

Сообщение от foo
Иными словами -- ничем.

да, ничем. Продолжайте в этом стиле.

foo 09.07.2014 16:27

BETEPAH,
Вы сейчас рассуждаете постфактум. Я не спорю, что если это гавно есть, приходится с ним считаться. Другое дело, что если бы его не было, разраб ничего бы не поерял. Оно не делает ничего, что не может сделать on. Кстати, вы не в курсе, окружение, в которое складываются ф-ции из addEventListener доступны для чтения/изменения? Это объект или замыкание?

BETEPAH 09.07.2014 16:51

foo,
var clickEvents = $(el).data("events").click;
jQuery.each(clickEvents, function(key, handlerObj) {
    alert(handlerObj.handler)
})

Мне не нравится общение с человеком всё_гавно_докажите_мне_обра тное, поэтому я потерял интерес к продолжению этого диалога.

foo 09.07.2014 17:10

BETEPAH,
Напишите на js. Я jQuery толком не знаю, тогда я отвечу.

Erolast 09.07.2014 19:15

Почему минус можно ставить только один раз?

Aetae 09.07.2014 19:36

А теперь фокус:
document.querySelector('head').addEventListener('load', function(e){
    console.log(e.target.src + ' loadead')
},true)

фокус №2:
document.addEventListener("DOMContentLoaded", function(event) {
    console.log("DOM fully loaded and parsed");
  });

foo 09.07.2014 20:22

Aetae,
Первый пример не работает. А второй, не понятно чем отличается от onload. Последний, кстати, срабатывает позже.

Aetae 09.07.2014 21:51

<html>
  <head>
    <script>
      document.querySelector('head').addEventListener('load', function(e){
        console.log(e.target.src + ' loadead')
      },true);
    window.onload = function(event) {
       console.log("window fully loaded");
    };
    document.addEventListener("DOMContentLoaded", function(event) {
      console.log("DOM fully loaded and parsed");
    });
    </script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.js"></script>
  <head>
  <body>
    <img src="http://fc05.deviantart.net/fs71/i/2014/190/2/1/berlin_downfall1945_by_lotharzhou-d7pfolv.jpg" width="100%">
  </body>
</html>


Часовой пояс GMT +3, время: 07:17.