2009-06-08 4 views
1

HTML:Jquery .Click s'applique à tous les sous-divs?

<div id="lowerLayer"> 
    <div id="positionLayer"> 
     <div id="imageLayer"> 
      <div id="imageHolder" style="background-image: url('/Images/Loading/ajax-loader.gif');"> 

      </div> 
     </div> 
    </div> 
</div> 

CSS:

#lowerLayer 
{ 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    right: 0px; 
    bottom: 0px; 
    width: 100%; 
    height: 100%; 
    background-color: Green; 
    cursor: help; 
} 
#positionLayer 
{ 
    position: relative; 
    margin-top: 80px; 
    width: 100%; 
    background-color: Red; 
} 
#imageLayer 
{ 
    position: relative; 
    width: 450px; 
    height: 400px; 
    margin: auto; 
    background-color: Blue; 
    background-image: url('../Images/Large-image-holder.png'); 
} 
#imageHolder 
{ 
    position: absolute; 
    left: 25px; 
    top: 25px; 
    width: 400px; 
    height: 300px; 
    line-height: 300px; 
    background-position: center; 
    background-repeat: no-repeat; 
    background-color: Aqua; 
} 

JQuery:

$(document).ready(function() { 
     $("#lowerLayer").click(function() { 
      $(this).fadeTo("fast", 0, function() { 
       $(this).hide(0); 
      }); 
     }); 
    }); 
}); 

Edit:

le problème im nous avoir que l'événement click semble être appliqué à tous sub divs je veux juste qu'il s'applique à "#lowerLayer"

Répondre

8

Je pense cela va résoudre votre problème:

$(document).ready(function() { 
     $("#lowerLayer").click(function(e) { 

      // Return if it's a child that's clicked: 
      if (e.target !== this) {return;} 

      // Otherwise continue: 
      $(this).fadeTo("fast", 0, function() { 
       $(this).hide(0); 
      }); 

     }); 
    }); 
}); 
+0

+1 mais je suis un peu surpris jquery n'a pas plus de * jquery * façon de décrire! Bubble – annakata

+0

Ne semble pas aussi jQueryish, mais e.target est l'endroit à regarder quand vous voulez faire la distinction entre l'élément qui a provoqué l'événement (e.target) et l'élément qui le capture en raison de la bulle (this). – jjmontes

2

Laissant la délégation d'événement et bouillonnant de côté, puisque je ne pense pas que ce soit pertinent au problème réel ici. La méthode jQuery hide() applique display: none aux styles d'un élément. Si un élément n'est pas affiché, aucun de ses descendants ne l'est non plus. De même, fadeTo() réduit l'opacité, ce qui a également un effet sur les descendants d'un élément.

+0

le problème im nous avoir que l'événement click semble être appliqué à tous les sous divs je veux juste l'appliquer à « #lowerLayer » – Peter

+0

Petoj , il n'est pas appliqué à tous les "sous-divs" - quand un événement click se produit, il se propage à travers les clics déclencheurs DOM sur tous les ancêtres (à moins qu'il ne soit arrêté) – James

+0

comment puis-je l'arrêter? – Peter

Questions connexes