2012-05-11 4 views
8

У меня есть следующий HTML-код:нет OnClick, когда ребенок нажал

<div class="outerElement"> 
    <div class="text"> 
    Lorem ipsum dolar sit amet 
    </div> 
    <div class="attachment"> 
     <!-- Image from youtube video here --> 
    </div> 
</div> 

И у меня есть OnClick событие JQuery на «.outerElement» Однако, я не хочу «.outerElement» OnClick событие будет когда я нажимаю на вложение, есть ли способ предотвратить это или проверить, какой элемент нажат?

+1

Возможный дубликат [Как предотвратить событие click() через внутренний div для родительского div в jQuery?] (Http://stackoverflow.com/questions/7835775/how-to-prevent-a-click-event -through-an-internal-div-to-parent-div-in-jquery) и [Как предотвратить включение события onclick родителя при щелчке дочернего якоря?] (http://stackoverflow.com/questions/ 1369035/how-do-i-prevent-a-parents-onclick-event-from-firing-when-a-child-anchor-is-cli) и [Как я могу остановить событие onclick при запуске для родительского элемента, когда дочерний щелкнул?] (http://stackoverflow.com/q/985389/218196). –

+0

Извините, я сделал несколько поисков в google и stackoverflow, но не смог найти никаких результатов, которые могли бы мне помочь. – xorinzor

ответ

14

Использовать event.stopPropagation() на дочернем элементе.

Это предотвращает появление пузырьков DOM до родительского узла.

Также часть объекта event является target member. Это скажет вам, с какого элемента запускалось событие. Однако в этом случае stopPropagation представляется лучшим решением.

$(".outerElement").on("click", function(event){ 
    console.log(event.target); 
}); 
0

Я не уверен, если вы можете предотвратить событие от стрельбы, когда attachment пункт нажата, но вы можете, конечно, фильтр для его

$('.outerElement').click(function() { 
    if ($(this).hasClass('attachment')) { 
    return; 
    } 
    // Handle event 
}); 
1

Это работает без JQuery

<div class="outerElement"> 
    <div class="attachment">Hello</div> 
</div> 

<script type="text/javascript"> 
document.getElementsByClassName('outerElement').onclick = function(){ 

    alert('You clicked on parent'); 

} 
document.getElementsByClassName('attachment').onclick = function(){ 

    event.stopPropagation(); 
    alert('You clicked on child'); 

} 
</script> 
0

Просто установка onclick="event.stopPropagation();" на детей сделают.

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