Почему не сработал hasClass?

Рейтинг: 0Ответов: 1Опубликовано: 13.10.2014

Пример мини-кода:

http://jsfiddle.net/4tbo301k/1/

Ответы

▲ 1Принят

@Oleg Ponomarchuk, омг. По клику вызывается событие. Вызывается на самом нижнем элементе и ползет по дереву вверх, этакая забавная виртуальная каракатица, стремящаяся к полному освобождению через всплывание до document и выше. Чтобы прибить любой элемент документа, можно повесить, как я показал, обработчик на самый верхний уровень, и через этот единый обработчик ловить все события-клики в документе. После отлова каракатицы кликнутый элемент определяется по e.target. Больше e.target нигде не нужен, вообще, он нужен только для того, чтобы словленное на верхнем уровне событие указало на тот элемент, по которому кликнули.

Чтобы избавить от такой участи .extend-wrapper (я специально не буду писать кэмелкейсом, потому что это плохая практика, хорошо?) и его детей, достаточно перехватить событие и не давать ему всплыть. Что и делает вызов e.stopPropagation(), повешенный в обработчик на .extend-wrapper - он приказывает событию прекратить распространяться вверх (вообще еще есть распространение вниз, но я уснул на той главе), предотвращая таким образом срабатывание обработчика клика на верхнем уровне - до него событие просто не дойдет. Ничего определять уже не нужно. Если событие отловилось, значит оно уже совершено на .extend-wrapper или одном из его дочерних элементов, просто надо остановить его.

Такая уж участь у бедной каракатицы.