2013-05-12 2 views
0

Рассмотрим следующую скрипку: FiddleРодитель mousenter/MouseLeave событие выпустили только на детей

Как я могу получить событий, запущенных из родительского div (класс outer) не от своих детей?

+0

Опубликовать код здесь вместо того, чтобы просто на другом сайте. После 22 месяцев, 30 вопросов и 5 ответов, я думаю, вы бы это знали. – 2013-05-12 14:13:18

+0

В браузерах, отличных от IE, вы * не можете * на самом деле запретить запуск мероприятия для детей. jQuery предоставляет исправление, так что ваш обработчик вызывается только из внешнего элемента, даже если это событие происходит. Проблема с вашей демонстрацией заключается в том, что между внешним и внутренним не существует отступов/полей, поэтому «e.target» будет внутренним. Я не знаю, почему jQuery не исправляет «e.target» в этой ситуации. Похоже на ошибку. – 2013-05-12 14:21:40

ответ

0

Это правильное поведение: вы поймали событие на родителе 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/