2015-10-09 4 views
1

У меня есть кнопка для загрузки. Кроме того, обработчик событий на основе jQuery (использует делегирование событий), который устанавливает/отключает загрузочный активный класс на соответствующем .btn на основе события click.Как отфильтровать дочерние элементы в обработчике событий?

Проблема возникает, когда у моих кнопок есть html-элементы внутри нее. Когда вы нажимаете на дочерний элемент кнопки, класс .active устанавливается на дочерние элементы .btn.

Как получать события только для точных элементов, которые меня интересуют?

http://jsfiddle.net/0nc3wjq4/ Чтобы воспроизвести проблему, нажмите на одно из номеров нажатием кнопки, а затем нажмите другой номер на другой кнопке.

<div class="btn-group btn-group-justified pipeline" role="group"> 
     <a href="#" class="btn btn-default" role="button"> 
     <h3 class="text-center">767</h3> 
     <p class="text-muted text-center">Stage1</p> 
     </a> 
    </div> 

Event Handler

$(".btn-group").on("click", ".btn", function(e) { 
    $(this).siblings(".active").removeClass('active'); // previous 
    $(e.target).addClass('active'); // current 
}); 

ответ

2

заменить $(e.target) с $(this)

e.target показывает как h3/p и не button

e.target является элементом, который вызвал событие, то есть - h3 вы нажали, который распространяется событие на a.btn. Это затем попало на ваш обработчик событий.

this - это элемент, который запускает обработчик.

+0

Огромное спасибо. Было бы здорово, если бы вы могли указать на документацию или объяснить разницу между $ (this) и e.target @ bg101 – smartnut007

+0

Это в документации [jQuery.on] (http://api.jquery.com/on/): _Примечание, что 'this' не может быть равно« event.target », если событие пузырилось из элемента-потомка. – Barmar

1

jsFiddle Demo

Вы искали возвращения ложной. Это остановит распространение (отличное от предотвращения по умолчанию), а также предотвратит действие click click по умолчанию. Кроме того, вы можете воспользоваться цепью здесь, чтобы сделать это в двух строках.

$('.btn').on('click',function(){ 
    $(this).addClass('active').siblings(".active").removeClass('active'); 
    return false; 
}); 
Смежные вопросы