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

JavaScript Discussion :

[AJAX] fonction load


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Par défaut [AJAX] fonction load
    Bonjour,

    Tout d'abord, avant d'exposer mon problème, je vous explique ce que je souhaite faire :
    - charger un menu avec jQuery dans une page Web avec la fonction load,
    - une fois ce menu chargé, quand on clique sur un lien de ce menu, charger un fichier html pour afficher du contenu (toujours avec la fonction load).

    Sachant que mon menu s'affiche avec la fonction load, le code HTML de ce menu ne s'écrit pas "en dur" dans ma page Web... Donc pour appliquer de nouveau un load dessus, j'utilise le plugin Live Bind. Seul problème, dans une fonction dépendant de Live Bind, je n'arrive pas à appliquer la méthode load (toutes les autres fonctions passent) ; voici donc mon 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
     
    function chargeTexte()
    {
    	//repérer un clic effectué sur un des liens "<a>" de la liste appartenant au div "#descr_sousMenu"
        $.live_bind("#descr_sousMenu ul li a").each(function(){
     
        //pour chaque lien cliqué :
         $(this).click(function(){
     
            //on récupère son id (de la forme "_monId")
            //le fichier à charger après le clic a un nom de la forme "monId.html" donc on supprime l'underscore en début de l'id
            //puis on ajoute l'extension ".html" et on demande d'aller chercher le bon fichier dans le bon dossier...
            var lien = $(this).attr("id");
            lien = lien.substr(1,lien.length-1);
     
            //juste pour tester 
            alert("ajax/contenus/"+lien+".html"); 
     
            //le div "#contenu" doit afficher le texte correspondant au lien cliqué
            $("#contenu").load("ajax/contenus/"+lien+".html");
     
            });
     
    	});
     
    }
    Autre problème : mon "each" ne fonctionne pas ! :'-(
    Synthaxe incorrecte ?

    Merci d'avance pour votre aide !

    PS : je précise que je débute avec jQuery !

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Je connais pas livebind, mais une chose me semble étrange.

    Avec JQuery un selecteur tel que "#descr_sousMenu ul li a" représente
    tous les liens de ton menu et pour affecter un click, nul besoin d'utiliser
    each.

    $("#descr_sousMenu ul li a").click( function() { } ); suffit a assigner le click
    à chaque liens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var lien = $(this).attr("id");
    lien = lien.substr(1,lien.length-1);
    // peut s'écrire dans ton cas:
    var lien = $(this).attr("id").substring(1);
    A noter aussi, puisque tu débute avec JQuery, qu'il serait très facile
    d'étendre JQuery avec une methode url() qui fait le code ci-dessus,
    ainsi tu pourrais écrire simplement var lien = $(this).url();

    Je pense aussi que tu ferais mieux d'utiliser le contenu du href pour stocker
    l'url, ça évite le risque d'avoir deux id identiques (supposons que deux liens
    doivent pointer sur une même page dans ton menu) et ça évite de devoir
    supprimer ton #

  3. #3
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Par défaut
    Merci pour ces conseils !
    Je vais essayer de les mettre en application !

  4. #4
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Par défaut
    C'est bon, j'ai trouvé la solution... en fin de compte, il y avait pas mal d'étourderies ! :
    J'utilise toujours le plugin "Live Bind", téléchargeable ici : http://plugins.jquery.com/node/3700
    Mon code au final donne ceci :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    $(document).ready(function(){
     
    	$("#sousMenu").hide();	//on cache le menu
        $("#contenu").hide(); //on cache la partie texte du site
    	showSousMenu(); 
    	chargeTxt();    
    }); 
     
    function showSousMenu(){
     
          //1) pour chaque lien survolé du div "#nav", on fait apparaître le menu.
          // Suivant l'id survolé, le contenu du menu change
          // donc pour afficher le bon menu en fonction du lien, on se base sur l'id
          $("#nav ul li a").mouseover(function(){
     
                   $("#sousMenu").fadeIn(2000);			  
     
                    var identifiant = $(this).attr("id"); //récupérer l'id de chaque lien de type "<li><a>"
     
                    // charger le fichier html dont l'identifiant correspondant à l'id
                    $("#sousMenu").load("ajax/sousmenu/"+identifiant+".html");		
     
          });
    }
     
    function chargeTxt()
    {
     
         //pour chaque lien cliqué, inclure le texte correspondant en se référant à l'attribut "rel" du lien (un id étant unique, on évite ainsi des problèmes de doublons)
    	 //Live Bind permet l'insertion de contenus à partir d'éléments HTML eux-mêmes chargés par jQuery (dans cet exemple, le menu)
         $.live_bind("#descr_sousMenu ul li a", 'click', function(){
     
            var txt = $(this).attr("rel");
     
            //le div "#contenu" doit afficher le texte correspondant au lien cliqué
    		$("#contenu").slideDown("slow");
            $("#contenu").load("ajax/contenus/"+txt+".html");
     
          });
    }
    Il permet d'appliquer des fonctions jQuery sur des portions de code elles-mêmes injectées dans la page avec jQuery... Sans Live Bind, étant donné que la 1ère partie de code est chargée avec jQuery, elle n'est pas écrite "en dur" dans la page donc il est difficile d'y appliquer des événements jQuery. Live Bind permet de pallier à ce problème.
    Voir la doc jQuery pour plus d'infos : http://docs.jquery.com/FAQ#Why_do_my...JAX_request.3F

    En espérant que ça pourra aider...

    @+
    Aurélie

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

Discussions similaires

  1. Fonction load (ajax)
    Par rberthou dans le forum jQuery
    Réponses: 2
    Dernier message: 02/08/2009, 20h27
  2. [AJAX] fonction de reponse avec argument, readystate reste à 1
    Par CrocodileMan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2007, 08h30
  3. la fonction load de XMLDOM
    Par fadex dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/03/2007, 09h45
  4. [AJAX] fonction js
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 16h42
  5. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43

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