2009-05-19 12 views
4

Quelqu'un peut-il m'aider avec cela? Il y a le code HTML:Comment distribuer un élément enfant à partir d'un événement click

<h3> 
    <label> 
     <input type="checkbox" name="country" value="us" /> United States 
    </label> 
</h3> 
<p>Some content goes here</p> 

Je veux basculer p élément en cliquant sur le h3 tag, mais je ne wan't pas passer si je clique sur l'étiquette

$('h3').click(function() { 
    // Does something goes here? 
    $(this).next('p').toggle(); 
} 
+0

Pourquoi pas? L'idée que le contenu de p est connecté à la case à cocher que vous êtes en train de basculer n'est-elle pas? – cgp

+0

Je suppose que l'étiquette signifie le texte réel, pas l'élément HTML. – tvanfosson

+0

(la case à cocher est activée par l'étiquette) – cgp

Répondre

17

Vous devez vérifier la cible de l'action

$('h3').click(function(e) { 
    // if they clicked the h3 only 
    if (this == e.target) { 
    $(this).next('p').toggle(); 
    } 
} 

La suggestion d'altCognito fonctionnerait également mais c'est plus de code.

+1

+1, oh J'aime mieux, quoi qu'il en soit, c'est bien. – cgp

+0

Merci, tous les deux! :) – sasa

2

Vous voulez stopPropagation()

$('h3').click(function() { 
    // Does something goes here? 
    $(this).next('p').toggle(); 
} 
$('label').click(function(e) { 
    e.stopPropagation(); 
} 
Questions connexes