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 :

Alterner hide et show


Sujet :

jQuery

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut Alterner hide et show
    Bonsoir,

    je cherche à alterner (show/hide) l'affichage d'une div par l'évenement mousedown d'une image bouton.

    j'ai l'impression de tourner en rond

    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
    17
    18
    19
    20
    21
    window.onload = function() {
     
    	var selectContainerList = $('#select_list'); // div (show/hide)
    	var selectContainerBtn = $('#select_btn'); // img bouton
     
    	$(selectContainerBtn).mousedown(function() {
     
    		var selecIsFocus = false;
     
    		if (selectContainerList.hide()||(selecIsFocus!=true)) {
    			selectContainerList.show();
    			selecIsFocus = true;	
    		}
    		else if (selectContainerList.show()||(selecIsFocus!=true)) {
    			selectContainerList.hide();
     
    		}
     
    	});
     
    };

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <html>
     <head>
     <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
     
     <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>
      <script type="text/javascript">
     
     
         $(document).ready(function() {
      		$("#image").click(function () { 
          		$("#texte").is(":visible") ? $("#texte").hide() : $("#texte").show();
        		});
     		});
     
      </script>
     </head>
     <body>
     
     
     	<img id="image" src="http://www.lesite.com/telechargements/photos/44857_bestiole.png">
     	<div id="texte">
     
    Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un peintre anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.
     
     	</div>
     
     </body>
    </html>
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Beaucoup de choses à redire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.onload = function()

    Tu devrais commencer par les fondamentaux : $.ready()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var selecIsFocus = false;
    	if (selectContainerList.hide()||(selecIsFocus!=true))
    Tu peux expliquer à quoi sert cette condition ???
    Puisque tu viens d'affecter à selecIsFocus la valeur false, comment pourrait-elle ne pas être différente de true
    D'autre part, quel est selon toi l'équivalent booléen de selectContainerList.hide() ?

    Enfin bref... en plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(function(){
        $('#select_list').mousedown(function(){
            $('#select_btn').toggle();
        });
    });
    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

  4. #4
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    merci ça fonctionne impecable avec ce ternaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    selectContainerList.is(":visible")?selectContainerList.hide()
    :selectContainerList.show();

  5. #5
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut


    Une aversion pour toggle() ?
    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

  6. #6
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Enfin bref... en plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(function(){
        $('#select_list').mousedown(function(){
            $('#select_btn').toggle();
        });
    });
    fonctionne très bien aussi avec toggle();

    que fait exactement cette fonction ?

  7. #7
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    merci g trouvé la doc : http://jquery.jarodxxx.com/manuel/Le...ements/toggle/

    je suis pas expert dans ces domaines j'apprend sur le tas.

    merci pour ces conseils

  8. #8
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bovino Voir le message


    Une aversion pour toggle() ?
    C'est moi le plus beau c'est tout

    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  9. #9
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Golgotha
    C'est moi le plus beau c'est tout
    Mouais... sauf que ta solution n'est valable que si les id sont uniques dans la page !
    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

  10. #10
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Mouais... sauf que ta solution n'est valable que si les id sont uniques dans la page !
    t'es jaloux parce que tu sais pas coder avec des id multiples c'est tout
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Autre pb, qd je clique ailleurs que dans le bouton et la div, je voudrais que la div se ferme, c'est pour ça que j'aivais une variable focus.

    load c'est parce que j'utilise $(document.body).

    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
    window.onload = function() {
    	var selectContainerList = $('#select_list'); // div
    	var selectContainerBtn = $('#select_btn'); // img
     
    	$(selectContainerBtn).mousedown(function() {
          selectContainerList.toggle();
    	});
     
    	 $(document.body).mousedown(function() {
    		 if (selectContainerList.has(this).length == 0) {
    		 //le click est en dehors du container; tu le hide
    			 selectContainerList.hide();
    	 }
     });
    };

  12. #12
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    load c'est parce que j'utilise $(document.body)
    Désolé, mais je vois pas le rapport

    qd je clique ailleurs que dans le bouton et la div, je voudrais que la div se ferme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(document).mousedown(function(e){
        if(!(e.target.id == 'select_list' || $(e.target).parents('#select_list').length)){
            selectContainerList.hide();
        }
    });
    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

  13. #13
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    j'utilise body car je souhaite que le code javascript/jquery reste entre les balise head

  14. #14
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est louable, mais je ne vois toujours pas le rapport...

    La méthode ready() (ou ses équivalents) peut être dans le head, ça n'empêchera pas qu'elle sera appelée quand la page sera chargée.
    $(document.body).mousedown( ici body n'est pas très utile : je te mets au défi de cilquer ailleurs que sur un élément du body dans la page
    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

  15. #15
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Merci pour ces info, dans l'exemple que vous donnez, que fait cette ligne svp ?

    ... $(e.target).parents('#select_list').length)){
    Merci

  16. #16
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    e.target retrouve l'élément DOM sur lequel l'événement s'est produit.
    $(e.target) transforme l'élément DOM en "élément" jQuery.
    .parents('#select_list') sélectionne parmi les balises ancêtre celles dont l'identifiant est "select_list".
    .length renvoie le nombre d'éléments trouvés, s'il n'y en a pas, length vaut zéro donc on rentre dans la condition et si tu cliques sur un élément qui n'est pas select_list ou qui n'est pas inclut dans select_list, ça masque la div.
    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

  17. #17
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    c'est vraiment bien ça, en désignant la liste ça englobe également les checkbox qui se trouve à l'intérieur.

    juste une dernière question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     		var selectContain = $('#select'); // div
    	var selectContainerList = $('#select_list'); // div
    	var selectContainerBtn = $('#select_btn'); // img
     
    	$(selectContainerBtn).mousedown(function() {
          selectContainerList.toggle();
    	});
    Permet d'alterner l'affichage de la liste, l'image bouton se trouve dans une div, je voudrais que lorsqu'on down aussi sur la div, ça réagisse comme le bouton. Si je demande conseil pour cela c'est parce que c'est un peu nouveau pour moi la gestion des évènements et je ne sais pas comment gérer une condition IF depuis le code ci-dessus, et aussi parce qu'un exemple m'apprend beaucoup...

    En tout cas merci encore pour toutes ces info.

    Merci

  18. #18
    Membre du Club Avatar de Hijack
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 30
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par dominos Voir le message
    ...l'image bouton se trouve dans une div, je voudrais que lorsqu'on down aussi sur la div, ça réagisse comme le bouton...
    Si je comprend bien tu voudrais appliquer ".mousedown(...)" à '#select_btn' et à '#select' ?

    Dans ce cas tu peux faire une sélection multiple comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var selectContain = $('#select'); // div
    var selectContainerList = $('#select_list'); // div
    var selectContainerBtn = $('#select_btn'); // img
    
    $(selectContainerBtn + ' ' + selectContain).mousedown(function() {
    selectContainerList.toggle();
    });

  19. #19
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Merci, en fait suffit de désigner le parent selectContainer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(selectContainer).mousedown(function() {
          selectContainerList.toggle();
    	});
    mais ça crée un conflit avec lignes suivantes:
    $(document).mousedown(function(e){
    if(!(e.target.id == selectContainerList || $(e.target).parents('#flt_select').length)){
    selectContainerList.hide();
    }
    });
    du coup la liste ne souvre plus

  20. #20
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Ci-dessous une illustration



    Le but donc est de cliquer sur la div (select(1) ou le bouton(2)) et alterner l'ouverture de la div liste (3). On peu alors sélectionner les radios ou checks sans qu'elle se ferme...

    Si on clique sur le document en dehors de la liste ouverte, la liste se ferme.

    Le soucis rencontré est que le clique sur le sélect n'est pas pris en compte pour ouvrir la liste mais seulement si je supprime ces lignes:

    // si down ailleur que sur le select, la liste, le bouton
    $(document).mousedown(function(e){
    if(!($(e.target).parents('#flt_select').length)){
    selectList.hide();
    }
    });
    Le code :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $(document).ready(function() {
     
    	var select = $('#flt_select'); // div
    	var selectBtn = $('#flt_select_btn'); // img
    	var selectList = $('#flt_select_list'); // div
     
    	// Si down sur div select ou bouton
    	$(select).mousedown(function() {
          selectList.toggle();
    	});
     
    	// si down ailleur que sur le select, la liste, le bouton
    	$(document).mousedown(function(e){
    	    if(!($(e.target).parents('#flt_select').length)){
    	        selectList.hide();
    	    }
    	});
     
    	// Si : Echap
    	$(document).keydown( function() { 
    		if (event.keyCode == 27) {
    			selectList.hide();
    		}		
    	});
     
    });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div id="select" class="select">
     <img id="select_btn" class="select_btn" src="public/images/select_btn.png">
     <div class="select_list" id="select_list" >
     ...radio...ou check
    </div>
     </div>
    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. listes liées avec les fonctions hide et show de kquery
    Par rookieweb dans le forum jQuery
    Réponses: 3
    Dernier message: 22/12/2011, 18h22
  2. jQuery - Hide() et show()
    Par noobyyy dans le forum jQuery
    Réponses: 1
    Dernier message: 21/08/2011, 00h25
  3. Form Hide() et show()
    Par enode dans le forum C#
    Réponses: 3
    Dernier message: 15/03/2011, 16h31
  4. Datepicker confirmation hide or show
    Par thecanea dans le forum jQuery
    Réponses: 2
    Dernier message: 25/02/2011, 15h54

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