2010-08-17 3 views
0

Im en utilisant la fonction suivante, cliquez sur un élément:comment dire jquery pour sélectionner un élément parent, mais pas ses enfants?

$('#extras').toggle(function() { 
        $('div#extras').show(); 
        $('div#extras').stop().fadeTo('fast', 1); 
       }, 
       function() { 
        $('div#extras').stop().fadeTo('fast', 0, function() { 
                  $(this).hide(); 
                  }); 
       } 
); 

extras est un div, avec beaucoup d'enfants en elle. Certains sont des boutons. Maintenant, chaque fois que je clique sur l'un des boutons, cela fait disparaître la div parent avec les enfants.

Comment puis-je faire en sorte que la fonction de clic ne se déclenche que si le parent est cliqué, et pas tous ses enfants?

Merci de

Répondre

1

Lorsque vous cliquez sur un élément, l'événement click sera déclenché pour tous les éléments parents. Cela peut être arrêté en renvoyant false à partir du gestionnaire d'événements des enfants. Vous devez donc avoir des gestionnaires d'événements pour tous les enfants qui ne doivent pas déclencher l'événement click de votre div et leur renvoyer false. Quelque chose comme ceci:

$("#id-of-button-inside-your-div").click(function() { 
    //Do whatever you need to do 
    return false; 
}); 
+0

Eh bien, la bonne chose est «extras» est une barre d'outils donc tout dans ce fait essentiellement quelque chose :) merci beaucoup! Je l'essaie maintenant – cat

+0

Oh wow c'est devenu très compliqué parce que je dois le faire à tellement de choses ... S'il y a un autre moyen que vous pourriez penser que ce serait génial – cat

0

Essai avant d'utiliser la méthode children().

$('div#extras').children().show(); 
1

Si vous masquez le parent, vous CACHEREZ les enfants (décédants) par défaut.

juste pour être complet: le sélecteur pour le parent de l'élément courant est $(this).parent();

+0

Je sais qu'il le cachera si le parent est caché. Ce que je veux dire, c'est que si je clique sur un bouton dans la div supplémentaire, qui est supposé faire quelque chose de complètement différent, il fait ce qu'il est censé faire, puis tout disparaît parce que ce que j'ai cliqué était à l'intérieur des extras div. Je veux être capable de faire fonctionner correctement le bouton, et il ne disparaîtra pas à moins que le parent (extras) soit sélectionné seul. Pas ses enfants aussi. & Merci :) je vais essayer cela maintenant – cat

0

Si un div disparaît, tout son contenu disparaît. Si vous devez faire disparaître le parent sans les enfants, vous devez placer les enfants à l'extérieur dans le DOM et, si nécessaire, les placer visuellement à l'intérieur en utilisant CSS.

+0

Ce n'est pas ce que je voulais dire désolé, je ne pense pas que j'étais assez clair. Je ai expliqué plus dans la question ci-dessus :) – cat

0

Essayez ceci:

$('div#extras').find('*').click(function(event){ event.stopPropagation(); }); 

Ainsi, tous les éléments à l'intérieur du div d'ignorer l'événement de clic de la div.

+0

Cela fonctionne un peu. Il annule la fonction de la div extras pour tous les enfants, mais il l'annule complètement, donc même si vous cliquez seulement sur les div divans, il ne fait rien. Merci bien! – cat

+0

Ensuite, vous pouvez l'utiliser, puis relier l'événement click sur les div internes, ou peut-être utiliser live dans les événements à l'intérieur. – NicolasT

Questions connexes