2010-08-11 19 views
8

mam strukturę jak tenjQuery - wyłączenie funkcji na kliknięcie elementu nadrzędnego

<table><tr><td></td><td><input type="button" name="button"></td></tr></table> 
<script> 
$('tr').click(function(){window.alert('tr');}) 
$(':input').click(function(){window.alert('input');}) 
</script> 

po kliknięciu na przycisk, tr kliknij zdarzenie nazywane również. czy istnieje sposób wyłączenia zdarzenia kliknięcia na elemencie nadrzędnym? jedynym znalezionym rozwiązaniem jest dodanie klasy do elementu nadrzędnego, a wewnątrz funkcji sprawdzania kliknięcia. na przykład:

<script> 
$('tr').click(function(){ if(!$(this).hasClass('disable')) { window.alert('tr'); } $(this).removeClass('disable'); }) 
$(':input').click(function(){window.alert('input'); $(this).closest('tr').addClass('disable');}) 
</script> 
+0

miałem dokładnie ten sam problem i to rozwiązanie jest zaskakująco trudne do znalezienia. Wielkie dzięki za zadawanie tego pytania i wszystkim odbierającym odpowiedzi za ich wkład. – MOnsDaR

Odpowiedz

14

użycie .stopPropagation()

$('tr').click(function(){ 
    window.alert('tr'); 
}); 
$(':input').click(function(e){ 
    e.stopPropagation(); 
    window.alert('input'); 
}); 

demo

+0

wydawało się, że to zbyt łatwe, ale działa jak urok. –

+0

+1, patrz komentarz na pytanie – MOnsDaR

3

.stopPropagation() będzie działać, ale jeśli nie chcesz zatrzymać całego zdarzenia, możesz po prostu wystrzelić, jeśli cele się zgadzają.

See this thread.

Powiązane problemy