2012-04-28 3 views
2

Я пытаюсь использовать .on(), чтобы рассказать мне, что я щелкнул внутри региона. Чтобы зафиксировать точный элемент, на который я нажал, я звоню event.stopPropagation(), чтобы он не пузырялся, но мой вывод всегда #containerDiv и его содержимое.

Как я могу видеть, что именно было нажато в пределах #containerDiv? Фрагмент кода ниже:

$("#containerDiv").on("click",function(event){ 
    event.stopPropagation(); 
    console.log($(this)); 
}); 

ответ

5

Использование event.target, не $(this); последний всегда будет элементом, которому был назначен обработчик.

+0

@ jfriend00: Я считаю, что применяется только для делегированных событий; этот случай не один. – Ryan

+1

Downvote отменен. Да это правда. Это относится к делегированным событиям. OP появляется так, как будто они хотят использовать делегированные обработки событий, но они делают это вручную. Они могли бы просто поместить селектор для фактического объекта в качестве аргумента '.on()', и тогда им не придется вручную использовать 'event.target'. – jfriend00

+0

@ jfriend00: Это правда. Я должен был знать, что в моем ответе недостаточно jQuery. ';)' – Ryan

5

Когда вы регистрируете событие на контейнере, событие имеет , которое уже зашуршало.

2

Попробуйте дать метод on()selector:

$("#containerDiv").on("click", "*", function(event){ 
    event.stopPropagation(); 
    console.log($(this)); 
}); 

Демо: http://jsfiddle.net/SnPjS/2/

+0

Работает! Я также нашел другой способ сделать это. Вместо event.stopPropagation event.target вернет элемент, который вызвал обработчик. – devnill

Смежные вопросы