IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Toggle close button


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 81
    Par défaut Toggle close button
    Bonjour,

    J'ai créé un code me permettant d'afficher du contenu supplémentaire via un Click sur un élément. Cet effet est réalisé à l'aide de la fonction toggle. Lors du click je toggle des class enfants contenues dans cet élément.

    Voici le code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $container.delegate( '.element', 'click', function(){
    		var $this = $(this);
    		var $previousLargeItem = $items.filter('.large');
    		if ( $this.hasClass('large') ) {
         		 return;
        		}	
        	$previousLargeItem.toggleClass('large');		
    		$previousLargeItem.children().children('.description').toggle();
    		$previousLargeItem.children().children('.element-image').toggle();
    		$previousLargeItem.children().children('.overlay').toggle();		
    		$(this).children().children('.description').toggle();
    		$(this).children().children('.element-image').toggle();
    		$(this).children().children('.overlay').toggle();
            $(this).toggleClass('large');
            $container.isotope('reLayout');		
          });
    Je n'arrive pas en cliquant sur un bouton close à obtenir l'inverse. C'est à dire enlever (toogle) les classes que je ne veut plus voir (celle que j'ai affiché précédemment).

    J'ai essayé ça mais ça ne marche pas complètement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $('div.close-button').click(function(){
    		$('.large').toggleClass('element');
    		$('.large').children().children('.description').toggle();
    		$('.large').children().children('.element-image').toggle();
    		$('.large').children().children('.overlay').toggle();
            $container.isotope('reLayout');		
          });
    Merci d'avance!

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $previousLargeItem.children().children('.description').toggle();
    Qu'est-ce que c'est que cette horreur !
    .children() récupère tous les éléments enfant d'un élément. Si tu l'appliques deux fois, ça veut dire que tu essayes de chercher parmi tous les éléments enfant de $previousLargeItem les éléments enfants de ceux-ci ayant la classe .description.
    Bien entendu, si l'élément (ou les éléments ) que tu recherches sont eux-même enfants directs de $previousLargeItem, tu ne pourras pas les récupérer !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 81
    Par défaut
    Merci pour la réponse.

    Par contre je ne comprends pas trop pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $previousLargeItem.children().children('.description').toggle();
    pose un problème. Ce code marche très bien. Il me permet de fermer le précédent élément ouvert lorsque que je clic sur un autre élément.
    C'est à dire que lorsque je clique sur un élément, les classes enfant apparaissent. Si je clique sur un autre élément, les classes enfant du précédent élément disparaissent et les classes enfant du nouveau élément apparaissent.

    Ce code provient du tuto de desandro pour le jquery isotope.

    Mon problème vient de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('div.close-button').click(function(){
    		$('.large').toggleClass('element');
    		$('.large').children().children('.description').toggle();
    		$('.large').children().children('.element-image').toggle();
    		$('.large').children().children('.overlay').toggle();
            $container.isotope('reLayout');		
          });
    Celui ci me ferme bien les classes enfant lors du clic sur le bouton close. Cependant quand je clique sur un autre élément, les classes du précédent élément réapparaissent.

    Peut être quand vidant le cache de la variable lors du clic sur le bouton close mon problème disparaîtra... je ne sais pas trop quoi faire....

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    C'est une horreur parce que tu fais des recherches inutiles et que ce code est beaucoup trop dépendant de la structure HTML.
    .find(selecteur) est largement plus adapté à ton cas.

    Bon, ceci dit, pour ce qui est de ton problème, il faudrait voir la structure HTML associée... Mais déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.large').toggleClass('element');
    va ajouter la classe à tous les éléments ciblés qui ne l'ont pas déjà et la retirer pour ceux qui l'ont déjà, ce qui n'est probablement pas ce que tu souhaites...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2011
    Messages : 81
    Par défaut
    Bon j'ai créé un petit fiddle pour illustrer mon problème. La première vignette comporte mon bouton close.

    Si je clique sur une vignette puis sur une autre mon premier code semble bien marcher. Par contre si je clique sur le close button, ça marche moins bien après...

    Voici le fiddle : http://jsfiddle.net/fNYFu/3/

    EDDIT: le fiddle marche mal sur IE...

Discussions similaires

  1. réactiver toggle button
    Par Bobble dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 02/12/2008, 11h10
  2. probleme de toggle button
    Par TheBootroo dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 06/06/2008, 14h52
  3. raccourci toggle button
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/03/2008, 08h41
  4. toggle button
    Par stgi02 dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 15h23
  5. [VBA-E] Toggle button: programmation des actions
    Par micknic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2005, 19h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo