Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с фазой перехвата в addEventListener, вопрос для профи (https://javascript.ru/forum/events/35250-problema-s-fazojj-perekhvata-v-addeventlistener-vopros-dlya-profi.html)

kichSman 05.02.2013 01:20

Проблема с фазой перехвата в addEventListener, вопрос для профи
 
Повторюсь, не работает именно перехват события, вместо него происходит всплытие.

Для примера, есть такой упрощенный код:
var cont    = document.querySelector('.cont'),
    btn     = document.querySelector('.btn');

init();//return 3

cont.addEventListener('DOMSubtreeModified', init, true);

btn.onclick = function(){
    var div = document.createElement('div');
    cont.appendChild(div);
}

function init(){
    alert(cont.children.length);
}


Проблема в том, что при клике, вначале перестраивается дерево, только после выполняется функция init(). Таким образом, init() после клика возвращает 4.

Кнопка с контейнером находятся на одном уровне (соседи), может быть проблема в этом? Но было бы странным, так как перехватывается именно изменение дерева контейнера, а не клик кнопки.

Chrome 24.0

В чем дело не пойму, может я на чем ошибся?
Заранее признателен.

danik.js 05.02.2013 01:43

А при чем тут фаза перехвата? DOMSubtreeModified возникает после изменения DOM-а, когда ваш div уже добавлен. У кого вы перехватить событие пытаетесь, у вас же всего один обработчик установлен.

К слову DOMSubtreeModified устарел, используйте MutationObserver


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