2010-09-23 2 views
1

Problème comme dans le sujet.jquery: empêche le clic à l'intérieur de div de la fermeture ... tous les éléments

Exemple:

<div id="trigger">click here</div> 
<div id="slider"> content goes here: form elems, divs, spans, a etc. </div> 

Comment puis-je le faire jusqu'à présent:

$(document.body).click(function(event){ 
     var target = $(event.target); 
      if (!target.is("#trigger") && !target.is("#slider") && [all elems in slider.div...] 
} 

Ce que je tente d'accomplir:
Éviter la liste de tous slider.div elems par id - si possible.
Autoriser un élément comme div avec id = "close" à l'intérieur de div diviseur pour le fermer.

+0

Voulez-vous le bouton pour disparaître lorsque le curseur se ferme, ou voulez-vous que le bouton reste visible, de sorte que vous pouvez ouvrir et fermer le curseur plusieurs fois? –

Répondre

2

Cela peut être accompli un certain nombre de façons, mais mon préféré est de nommer le déclencheur quelque chose comme slider_1 et lui donner une classe si .slider. Puis donnez au curseur actuel un identifiant de slider_1_content avec une classe si .slider_content. Cela vous permettra d'écrire quelque chose comme:

$(".slider").click(function() { 
    $("#" + this.attr("id") + "_content") ... 
}); 

Vous pouvez ensuite affecter une classe close à vos boutons/liens étroits et les forcer à fermer le curseur parent comme:

+0

[** '.closest()' **] (http://api.jquery.com/closest/) va, '" Obtenir le premier élément ancêtre qui correspond au sélecteur, en commençant par l'élément en cours et en progressant à travers l'arbre DOM. "' Les éléments OP sont ** frères et sœurs ** pas les descendants. ------ De plus, si le parent est le curseur, le bouton disparaîtra. Vous pouvez utiliser '.find()' pour les boutons parents et les curseurs enfants. –

+0

le bouton/lien '.close' serait un descendant et non un frère. Le premier morceau de code que j'ai posté adresse le problème du déclencheur/curseur. –

+0

Précisément. Si le DIV 'close' classé est un descendant, alors si vous cliquez dessus, il disparaîtra ** (avec le contenu du curseur) !! Si ce n'est pas un descendant, alors 'closer (()' ne fonctionnera pas. Essayez-le ==> http://jsfiddle.net/tSTcL/ ---- PS: Je ne reçois pas de notification si vous commencez votre message avec '@ Peter'. Seuls les auteurs et les éditeurs d'un message obtiennent une notification automatique. –

Questions connexes