2009-09-07 9 views
5

Powiedzmy mam następujący kod:zdarzenia click na div nie powinno być wywołane przez to jest dzieci

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

Teraz dołączyć zdarzenie onClick do div:

$('#parent').click(function() { ... }); 

Czy istnieje prosty sposób na zatrzymanie zdarzenia po uruchomieniu, gdy kliknę div dziecka? Nie chcę robić coś

$('#child').click(function() { return false; }); 

ponieważ div dziecko może zawierać linki ...

Dzięki!

Odpowiedz

8

Sprawdź numer event target.

Poniższy kod jest nietestowany.

var div = document.getElementById('parent'); 
jQuery(div).click(function(event) { 
    if (event.target !== div) { 
    return false; 
    } 
}); 
+0

testowany ... to działa –

2

stopPropagation

$('#child').click(function(event) { 
     event.stopPropagation(); 
     //... 
}); 
+0

Pytanie mówi, że nie chce, aby dołączyć zdarzenia do każdego elementu podrzędnego. – Quentin

+0

@ David Dorward, Co tu mówi? "ponieważ div dziecka może zawierać łącza ..." –

+1

Tylko po to, aby chronić tę odpowiedź: użyto metody stopPropagation, ale zapobieganie nie było skutkiem, co oznacza, że ​​twoje linki będą nadal uruchamiane, nawet jeśli dysponujesz programem obsługi przypisanym do kliknięcia. jQuery jest bardzo przyjazny w sposobie, w jaki dodaje funkcje obsługi zdarzeń, aby zapewnić, że domyślne zachowanie i wszelkie wcześniej przypisane procedury obsługi (tj. zgodne z html) nadal działają zgodnie z oczekiwaniami. –

Powiązane problemy