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 :

Ajout de tableau et exécution


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut Ajout de tableau et exécution
    Bonjour à tous,
    J'ai besoin de vos lumières pour comprendre un problème.
    J'ai adapter un menu acordéon avec jQuery.

    Mon code js est le suivant :
    Code JS : 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
    29
    30
    31
    32
    33
    34
    35
     
    // JavaScript Document
     
    $(document).ready( function () { 
     
        // On cache les sous-menus : 
        //$(".navigation ul.subNavigation").hide(); 
    	// sauf celui qui porte la classe "open_at_load" : 
        $("ul.objectName ul.objectDescription:not('.open')").hide(); 
     
    	// et on remplace l'élément span qu'ils contiennent par un lien : 
    /*    
    	$(".navigation li.level1 span").each( function () { 
           // On stocke le contenu du span : 
            var TexteSpan = $(this).text(); 
            $(this).replaceWith('<a href="#" title="Afficher le sous-menu">' + TexteSpan + '<\/a>') ; 
        } ) ; 
    	// On modifie l'évènement "click" sur les liens dans les items de liste 
        // qui portent la classe "toggleSubMenu" : 
      
    */  
      $("ul.objectName li.level1 > a").click( function () { 
            // Si le sous-menu était déjà ouvert, on le referme : 
            if ($(this).next("ul.objectName ul.objectDescription:visible").length != 0) { 
                $(this).next("ul.objectName ul.objectDescription").slideUp("normal", function () { $(this).parent().removeClass("open");$(this).parent().addClass("close") }); 
            } 
            // Si le sous-menu est caché, on ferme les autres et on l'affiche : 
            else { 
                $("ul.objectName ul.objectDescription").slideUp("normal", function () { $(this).parent().removeClass("open");$(this).parent().addClass("close") }); 
                $(this).next("ul.objectName ul.objectDescription").slideDown("normal", function () { $(this).parent().removeClass("close");$(this).parent().addClass("open") }); 
            } 
            // On empêche le navigateur de suivre le lien : 
            return false; 
        });
    } ) ;

    et mon de html / PHP est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    echo '<ul class="objectName"><li class="level1">';
    echo '<a href="#">tt</a>';
     
    echo '<table><tr><td>hh</td></tr></table>';
     
    echo '<ul class="objectDescription close"><li>';
    echo '<div>test</div>';
    echo '</li></ul></li></ul>';
    ?>
    Ce que je ne comprends pas pourqoi ca fonction quand je commente cette ligne
    #echo '<table><tr><td>hh</td></tr></table>';
    Si je la décommentre, le <ul class="objectDescription close"> ne se développe pas alors qu'il se développe normalement quand la ligne, ci-dessus , est commentée!!!

    Avez vous une idée pourquoi le table a une infuance?
    Ne serait-il pas un problème de DOM?

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 91
    Par défaut
    Hello pierrot10,

    L'ajout d'élément après ton tag 'a', empêche une sélection correcte de <ul class="objectDescription close"> via la méthode next("...").

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut
    ok , mais alors comment perfectionner ce code alors?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 91
    Par défaut
    A mon avis la solution la plus simple consiste à utiliser nextAll() et en ne prenant que le premier.

    next() retourne le tag frère (sibling) suivant respectant le sélecteur s'il est précisé. Dans ton cas, le tag frère suivant est le tag 'table' qui ne respecte pas le sélecteur?

    nextAll() retourne tous les tag frère (sibling) suivant respectant le sélecteur s'il est précisé. Dans ton cas, on ne prendra que le premier de ces tags frères.

    Voici ce que ça donne en reprennant ton code (au passage, je ne l'ai pas essayé !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      $("ul.objectName li.level1 > a").click( function () { 
            // Si le sous-menu était déjà ouvert, on le referme : 
            if ($(this).nextAll("ul.objectName ul.objectDescription:visible").length != 0) { 
                $(this).nextAll("ul.objectName ul.objectDescription")[0].slideUp("normal", function () { $(this).parent().removeClass("open");$(this).parent().addClass("close") }); 
            } 
            // Si le sous-menu est caché, on ferme les autres et on l'affiche : 
            else { 
                $("ul.objectName ul.objectDescription").slideUp("normal", function () { $(this).parent().removeClass("open");$(this).parent().addClass("close") }); 
                $(this).nextAll("ul.objectName ul.objectDescription")[0].slideDown("normal", function () { $(this).parent().removeClass("close");$(this).parent().addClass("open") }); 
            } 
            // On empêche le navigateur de suivre le lien : 
            return false; 
        });

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 167
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 167
    Par défaut
    Salut Sedryk,

    Merci pour ta réponse. En fait ta solution est de remplacé tout les next() par nextAll().

    Je l'ai fait mais ca n'a malheureusement pas résolu le problème. Ca ne change pas

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 91
    Par défaut
    Citation Envoyé par pierrot10 Voir le message
    En fait ta solution est de remplacé tout les next() par nextAll().
    En oubliant pas de sélectionner uniquement le premier élément. Sinon peux-tu me fournir le code html que ton php génère ?

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

Discussions similaires

  1. Ajout de tableau à la fin d'un tableau
    Par TobyKaos dans le forum C
    Réponses: 25
    Dernier message: 12/09/2007, 15h13
  2. [Débutant] Ajout JAR externe : pb exécution
    Par arthix dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 15/01/2007, 22h35
  3. [Tableaux] Ajout dans tableau associatif
    Par bizet dans le forum Langage
    Réponses: 3
    Dernier message: 15/10/2006, 10h57
  4. Ajouter Fichiers Ressources en exécution
    Par bandit boy dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/06/2006, 09h00
  5. [CR 9.1] comment faire pour ajouter un tableau dans un état?
    Par anneso108 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 28/03/2006, 14h40

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