2012-05-18 15 views
25

Desidero .fare clic su non fare nulla SE l'utente fa clic su <p>text</p> all'interno del div, per tutto il resto voglio che div .click funzioni.JQuery .click - esclude elementi specifici all'interno di div

HTML:

<div> 
    <span>yes</span> 
    <p>text</p> 
</div> 

Jquery:

<script> 
$(document).ready(function() { 

    $("div").click(function() { 

     alert("woohoo!"); 

    }); 

}); 
</script> 

risposta

76
$("div").click(function(e) { 
     if($(e.target).is('p')){ 
      e.preventDefault(); 
      return; 
     } 
     alert("woohoo!"); 
    }); 

controllo l'obiettivo del click. in questo modo non è necessario associare un altro evento.

+6

Non necessario 'e.preventDefault()' –

+1

difficile da dire, senza vedere il resto del codice. Probabilmente è necessario usare – mkoryak

+1

"return false", che equivale a chiamare e.preventDefault() ed e.stopPropagation() in questo caso. Controlla http://api.jquery.com/category/events/event-object/ – Oriol

-2
$("div > span").click(function() { 

    alert("woohoo!"); 

}); 

Ma è meglio fornire id per il proprio elemento html.

+0

Non funziona per span all'interno di altri bambini, l'OP dice per "tutto il resto", l'interpretazione è che il codice non è limitato ai bambini. –

+0

Si prega di leggere la domanda prima di rispondere. –

2
<script> 
$(document).ready(function() { 
    $("div :not(p)").click(function(event) { 
     alert("woohoo!"); 
    }); 
}); 
</script> 

Ciò implica che non si cura di nodi di testo come figli del contenitore <div>.

+1

Questo non funziona. – Wtower

+1

@Wtowe, sì funziona, ecco la prova http://jsfiddle.net/n983hzvn/1/ –

+0

Ok, ho perso la frase "... all'interno del div ...". Ecco l'aggiornamento, e la risposta verrà aggiornata di conseguenza: http://jsfiddle.net/n983hzvn/2/ –