Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   вложенный addEventListener (https://javascript.ru/forum/events/68406-vlozhennyjj-addeventlistener.html)

Prowler 13.04.2017 22:37

вложенный addEventListener
 
Доброго времени суток!
Столкнулся с такой ситуацией:
Скрипт динамически создает несколько таблиц. На каждую таблицу вешается обработчик onclick, вида:
var applyElement = document.querySelector('#test');
var someElement = document.createElement('div');
applyElement.append(someElement);

table.addEventListener('click'. function(target){
//Если event.target == <a> ченить делаем
//в общем то вся обработка это манипуляции стилями
//здесь пытаюсь добавить еще один обработчик на внешний элемент
someElement.addEventListener('click', function(){alert('Hello')});
})

Так вот: table вложена в someElement (если это имеет значение). Теперь при щелчке на элемент <a> внтри table срабатывает не только функция навешенная на него, но и второй обработчик, который весит на someElement! Т.е. увидим alert()
Другими словами ситуация такая: есть
<div id='one'>
    <div id='two'>
        <div id='three'>
        </div>
    </div>
</div>

если добавить обработчик события на id='three', который при наступлении события должен повесить обработчик на id='two', это обработчик сразу же и срабатывает.

Почему так происходит?

Сейчас обошел это так.
function test(){
 realFunction();
}
table.addEventListener('click' function(){
     someElement.addEventListener('clilck', test); //теперь все нормально
});

Правда вот контекст потеряла realFunction, но сейчас что-нибудь придумаю, недеюсь.

рони 13.04.2017 22:56

Prowler,
stopPropagation

Prowler 13.04.2017 23:09

рони,
блин! Точно, всплывает, а на нем как раз уже висит обработчик. Вот я... Спасибо, спасибо :-)


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