2010-02-06 2 views
2

scénario rapide ok:Comment puis-je empêcher jquery de sélectionner un parent lorsque je clique sur l'un des enfants de ce parent?

html:

<span class="answer">blah<input type="radio" value="1"></span>

jquery:

$("span.answer").click(
function() {
check = $("input", this);
check.attr('checked', check.attr('checked') === true ? false : true);
);

Ok, donc cela va cocher/décocher l'entrée radio enfant à l'intérieur de la durée sélectionnée lorsque je clique à l'intérieur. Le problème que j'ai est que je ne veux pas courir cet événement quand je clique réellement sur le bouton radio lui-même (évidemment parce que jquery verra le bouton radio comme coché et décocher - dans l'effet exactement le contraire de ce qui devrait arriver habituellement). Quelque chose le long des lignes de celle-ci:

$("span.answer:not(span input)").click

Bien sûr, ne fonctionne pas. Des idées? Merci d'avance!

Leo

Répondre

4

Il y a une balise HTML spécifique pour accomplir ce que vous essayez de faire avec jquery et javascript ..
est la balise label

<label>blah<input type="radio" value="1" /></label> 

cela aura l'effet que vous voulez

[mise à jour] Pour Internet Explorer 6 de jouer n glace utilisez la syntaxe complète de l'étiquette en utilisant l'attribut for qui cible l'identifiant d'une entrée de forme/select/etc .. élément ..

<label for="radio_1">blah<input id="radio_1" type="radio" value="1" /></label> 
+0

Oui, cette méthode fonctionnera (sans javascript) mais ne joue pas la balle dans ie6. – Leo

+0

n'était pas au courant de cela .. vous pouvez utiliser l'attribut 'for' pour faire ce travail .. regardez la réponse mise à jour .. –

+0

Oui cela fonctionne certainement merci. Je ne voulais pas utiliser d'identifiants pour ces entrées radio particulières, mais je suppose que je peux travailler différemment. Des idées sur le problème de sélecteur de jquery plus large détaillé ci-dessous? – Leo

5
$("span.answer input").click(function(evt) 
{ 
    evt.stopPropagation(); 
}); 

Prévient l'événement click bouillonne (et le déclenchement du gestionnaire sur "span.answer".)

+0

Oui, ça fonctionne vraiment comme j'en ai besoin. Est-ce la solution la plus élégante au problème, pensez-vous? Il y a beaucoup d'occasions où j'ai un événement lié à l'élément que je ne veux pas déclencher quand je clique sur un enfant de cet élément. Je pensais qu'il pourrait y avoir une certaine technique de sélection sophistiquée pour accomplir ceci à l'instar de l'exemple de ma question. – Leo

+0

Ceci est la bonne réponse à la question initiale, cependant, l'utilisation de la balise

+0

Oui, dans ce cas, l'utilisation correcte de la balise 'label' entraîne automatiquement le comportement que vous recherchez sans javascript. Sinon, il n'y a pas de sélecteur pour accomplir ce que vous cherchez. Si vous cliquez sur un élément enfant, il fait une bulle. C'est la façon dont les choses fonctionnent et c'est généralement souhaitable. – Koobz

Questions connexes