PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 25-09-2012 17:56:15

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

JQuery comment invoquer une méthode d'un enfant de this ?

Saluton,
Je m'explique, dans mon précédent post "JQuery ça commence mal", je suis parvenu à intercepter l'événement "click" d'un item de menu

        $(document).ready(function(){
            $("li.mp").bind ("click", function (event){
                $(this).slideToggle('medium');
                });
            });

mais ce code invoque, bien entendu, la méthode slideToggle() de l'item cliqué, ce qui ne m'arrange pas car, du coup, c'est l'item cliqué du menu qui disparait.

Rappel du code HTML

    <body>
        <div class="menu">
            <ul>
              <li class="mp">Rub 1</li>
                <ul>
                  <li>1.1</li>
                  <li>1.2</li>
                </ul>
              </li>
              <li class="mp">Rub 2</li>
                <ul>
                  <li>2.1</li>
                  <li>2.2</li>
                </ul>
              </li>
              <li>Rub 3</li>
            </ul>
        </div>
    </body>

Ce que je souhaite, c'est invoquer ladite méthode de l'unique fils <ul> de "this" afin de le masquer ou l'afficher.

J'ai tenté

$(this.childNodes[1]).slideToggle('medium');
/* this.childNodes[0] correspond aux textes "Rub 1" ou "Rub 2"*/

mais ça plante JQuery.

Une idée ?



Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#2 25-09-2012 19:08:06

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

Je viens d'essayer ça

        $(document).ready(function(){
            $("li.mp").bind ("click", function (event){
            var context = this.childNodes[1];
                $("ul",context).slideToggle('medium');
                });
            });

mais là c'est pire, tout disparaît.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 25-09-2012 19:12:06

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

Et ça :

        $(document).ready(function(){
            $("li.mp").bind ("click", function (event){
            var element = this.childNodes[1];
                $(element).slideToggle('medium');
                });
            });

ça ne fait rien du tout.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 25-09-2012 20:35:44

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

Autre tentative tout aussi infructueuse

        $(document).ready(function(){
            $("li.mp").bind ("click", function (event){
            var element = $(this).find('ul');
                $(element).slideToggle('medium');
                });
            });

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 25-09-2012 21:05:01

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 165

Re : JQuery comment invoquer une méthode d'un enfant de this ?

element.slideToggle('medium')

a++

Hors ligne

#6 25-09-2012 21:22:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

Ouais, merci Pierrot,
J'avais essayé aussi mais ça ne fonctionnait pas du fait que les balises fermantes </li> des rubriques 1 et 2 étaient redondantes, la première située avant les <ul> de deuxième niveau.
Bon, dorénavant j'obtiens bien l'effet voulu, mais je dois comprendre comment forcer tout <ul> déployé (slideTogglé, si j'ose ce néologisme) à se recroqueviller, de façon à ce qu'il n'y ait toujours qu'un seul sous-menu déployé.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 25-09-2012 21:30:42

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

J'ai trouvé

        <script type="text/javascript">
        $(document).ready(function(){
            $("li.mp").bind ("click", function (event){
            $("li.mp").find('ul').slideUp('medium');
            $(this).find('ul').slideToggle('medium');
                });
            });

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 25-09-2012 21:37:33

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : JQuery comment invoquer une méthode d'un enfant de this ?

Enfin presque, parce que là si je clique sur "Rubrique 1" alors qu'elle est déjà déployée elle se ferme puis se rouvre, c'est à dire que je perds l'effet bascule du slideToggle.
Il faudrait que je dispense $(this).find('ul') de son slideUp.
Bon, mais là je vais arrêter pour ce soir.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums