2013-08-25 3 views
2

Когда я нажимаю на дочерний элемент внутри div (класс 'butMedWhite') - jquery думает, что я нажимаю на родительский элемент ('.alternative'). - даже когда я сбрасываю «это» внутри консоли, он говорит, что я нажал на альтернативу класса (см. код ниже) - не класс «butMedWhite» - есть ли у кого-нибудь идеи, почему? Вот HTML:JQuery click - считает его родительский элемент, а не дочерний

<div class="alternative _activeCategory"> 
    <div class="alternative_inner"></div> 
    <div class="expandable" style="display: block;"> 
     <div class=" criteriaContainer"> 
      <a class="butMedWhite altCreator">add rule</a> 
     </div> 
    </div> 
</div> 

и вот JQuery:

$('.altExpander').on('click', '.alternative', function(e) { 
        console.log(this); 
        if(!$(this).hasClass('_activeCategory')){ 
         expandCategory($(this)); 
        }else{ 
         closeCategory(); 
        } 
       }); 

Спасибо за любую помощь!

+0

щелчок определенный для альтернативы класса контейнера –

+0

Да, это потому, что я хочу, чтобы что-то произошло, когда пользователь нажимает «альтернативный», а также когда он нажимает на дочерний элемент - извините, я должен был поставить это в вопросе! – matt

ответ

2

jQuery предоставляет в качестве контекста ваш обратный вызов элемент, на который вы связали обработчик событий, так же как и собственные функции DOM.

Если вы хотите Clicked элемент вместо этого, не используйте this но e.target:

$('.altExpander').on('click', '.alternative', function(e) { 
    var clicked = $(e.target); 
    console.log(clicked); 
    if(!clicked.hasClass('_activeCategory')){ 
      expandCategory(clicked); 
    }else{ 
      closeCategory(); 
    } 
}); 
0

Это потому, что ваш селектор ".alternative" в этой строке:

$('.altExpander').on('click', '.alternative', function(e) 

Если вы хотите this, чтобы быть якорной меткой, вам необходимо использовать

$('.altExpander').on('click', '.alternative a', function(e) 
Смежные вопросы