2013-09-03 3 views
2

Я получаю странное поведение с моим событием «mouseup». У меня есть div внутри div. Событие mouseup привязано к OUTER div, но если я нажму на INNER div, e.target будет установлен на дочерний div вместо родительского div, который имеет событие.JQuery MouseUp report CHILD element

Это нормально?

<div class="parent"> 
    <div class="child"></div> 
</div> 

Так:

$("body").on('mouseup', '.parent',myMethod); 

Сообщает об e.target как ребенка, если он точно щелкнул.

+2

_ "Разве это нормально?" _ Да. Это событие распространяется на DOM. – j08691

+0

Распространение Я понимаю, но не должен ли он добраться до родителя? Отметим, что даже ребенка нет. Разве это не означает, что все div будут сообщать клик, независимо от назначения события? Я должен отметить, что у меня есть сотни обработчиков событий с детьми, и никто из них не делает этого. –

+0

Ознакомьтесь с объяснением http://api.jquery.com/on/#direct-and-delegated-events – j08691

ответ

1

Обратите внимание на разницу между .target и .currentTarget

Это свойство объектов событий является объектом событие было отправлено на. Он отличается от event.currentTarget, когда обработчик события вызывается в стадии барботирования или захвата события.

  • event.target // Ссылка на цель, к которой событие было первоначально послано.
  • event.currentTarget // Ссылка на текущий зарегистрированный объект для события.

Worth испытания:

$("body").on('mouseup', '#parent1', function (e) { 
    console.log(e.target,e.currentTarget); 
}); 

Demo jQuery
Demo plain javascript


Больше чтение:

MDN: event.target
MDN: event
JQuery (explanation о прямых и делегированных событий)

+1

РЕШЕННЫЙ! OMG, я не могу поверить, что использовал неправильную цель. DERP! Огромное спасибо. –