2009-09-07 15 views
5

Diciamo che ho il seguente codice:evento click su un div non dovrebbe essere innescato da esso per bambini

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

Ora allegare un evento onClick al div genitore:

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

C'è un modo semplice per fermare l'attivazione dell'evento quando faccio clic sul div figlio? Non voglio fare qualcosa di simile

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

perché il div bambino potrebbe contenere dei link ...

Grazie!

risposta

8

Verificare il event target.

Il seguente codice non è stato verificato.

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

testati ... questo funziona –

2

stopPropagation

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

La questione dice che non vuole allegare un evento per ogni elemento figlio. – Quentin

+0

@David Dorward, cosa dice qui? "perché il div bambino potrebbe contenere collegamenti ..." –

+1

Solo per proteggere un po 'questa risposta: stopPropagation è stato usato ma preventDefault no, il che significa che i tuoi collegamenti continueranno a essere attivati ​​anche se hai un gestore assegnato a fare clic. jQuery è estremamente amichevole sul modo in cui aggiunge i gestori di eventi per garantire che il comportamento predefinito e tutti i gestori precedentemente assegnati (ad esempio, in linea con html) funzionino ancora come previsto. –

Problemi correlati