Рассмотрим следующую скрипку: FiddleРодитель mousenter/MouseLeave событие выпустили только на детей
Как я могу получить событий, запущенных из родительского div
(класс outer
) не от своих детей?
Рассмотрим следующую скрипку: FiddleРодитель mousenter/MouseLeave событие выпустили только на детей
Как я могу получить событий, запущенных из родительского div
(класс outer
) не от своих детей?
Это правильное поведение: вы поймали событие на родителе div
, но фактический отправитель события, то есть элемент, который вызвал его, был внутренний div
(вероятно, это потому, что там нет места между родителем & внутренних divs, как @squint сказал). Для этого используется e.target
. Свойство this
в контексте обработчика событий всегда получает элемент, который обрабатывает событие.
$('.outer').on('mouseenter',function(e){alert($(this).attr('class'));});
JSFIddle: http://jsfiddle.net/tRP2k/3/
Прочтите подробности & примеры: http://api.jquery.com/event.target/
Опубликовать код здесь вместо того, чтобы просто на другом сайте. После 22 месяцев, 30 вопросов и 5 ответов, я думаю, вы бы это знали. – 2013-05-12 14:13:18
В браузерах, отличных от IE, вы * не можете * на самом деле запретить запуск мероприятия для детей. jQuery предоставляет исправление, так что ваш обработчик вызывается только из внешнего элемента, даже если это событие происходит. Проблема с вашей демонстрацией заключается в том, что между внешним и внутренним не существует отступов/полей, поэтому «e.target» будет внутренним. Я не знаю, почему jQuery не исправляет «e.target» в этой ситуации. Похоже на ошибку. – 2013-05-12 14:21:40