2010-08-23 9 views
1

J'ai supprimé un rappel de clic sur un div que je voudrais ignorer si un utilisateur clique sur un lien à l'intérieur de ce div. La fonction ressemble à ceci:Vous voulez que JQuery ignore un clic sur un élément enfant particulier

$(".section").click(function(){ 
    if ($(this).hasClass("solid")) { 
     $(this).removeClass("solid"); 
     $(this).hover(fadeFunction, darkenFunction); 
     $(this).fadeTo(150, inactiveOpacity); 
    } 
    else { 
     $(this).addClass("solid"); 
     $(this).unbind("mouseenter"); 
     $(this).unbind("mouseleave"); 
     $(this).fadeTo(25, inactiveOpacity); 
     $(this).fadeTo(150, activeOpacity); 
    } 
}); 

J'ai essayé enroulant le if/else dans un if(!$(this).is("a)) { mais il n'y a pas de changement de comportement. Quelqu'un peut-il souligner ce que je ne comprends pas ou mal? Désolé, si c'est une question facile, je suis un débutant JQuery/css.

Répondre

12

Vous pouvez vérifier si la cible d'événement est un point d'ancrage, comme celui-ci:

$(".section").click(function(e){ 
    if($(e.target).is("a")) return; 

    if ($(this).hasClass("solid")) { 
     $(this).removeClass("solid"); 
       .hover(fadeFunction, darkenFunction); 
       .fadeTo(150, inactiveOpacity); 
    } 
    else { 
     $(this).addClass("solid"); 
       .unbind("mouseenter mouseleave"); 
       .fadeTo(25, inactiveOpacity); 
       .fadeTo(150, activeOpacity); 
    } 
}); 
+0

Merci Nick Craver! – Rich

5

Essayez ceci:

$('a').click(function(e) { 
    e.stopPropagation(); 
}); 

Vous pouvez trouver de la documentation: http://api.jquery.com/event.stopPropagation/

+3

Ceci est la bonne approche , mais vous souhaiterez peut-être le confiner à des liens dans le div spécifié, plutôt que tous les liens, par exemple '$ (" div.section a "). cliquez sur (...'. –

+0

Oui, vous avez raison, je l'ai voulu comme une approche commune (+1) – davehauser

+3

Gardez à l'esprit que c'est une approche beaucoup plus onéreuse, il est moins cher d'ajouter un si check * quand * un événement se produit plutôt que de lier inutilement les gestionnaires d'événements 'n' :) –

Questions connexes