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 :

$(document).ready fonctionne anormalement


Sujet :

jQuery

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 74
    Par défaut $(document).ready fonctionne anormalement
    Bonjour,

    Après avoir tourné et retourné le problème je n'arrive toujours pas à une solution.
    Voici mon problème :

    Dans ma page mère j'ai ceci :

    J'utilise la fonction suivante (dans la partie "head") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $(document).ready(function () {	
     
      $("a").click(function(){
         // Appel ajax
       });
    return false;		 
    });
    Avec des liens (dans le body) comme ceci pour passer par le "ready" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div class='maClasse'><a href='maPageAChargerDansLeDiv.php'>Ma Page</a></div>

    maPageAChargerDansLeDiv.php est bien chargée dans mon div en AJAX en passant par le "ready" SEULEMENT lorsque ce lien vient de la page mère ou bien qu'il est chargée dans ma page mère par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include('maPageContenantLeLien.php');
    (le href se trouvant dans 'maPageContenantLeLien.php')


    Par contre si je charge 'maPageContenantLeLien.php' dans un DIV de ma page mère grâce à AJAX (JQUERY) alors le lien href présent dans cette page ne passe pas par 'ready' et n'est donc pas chargé en AJAX.

    Comme s'il n'était pas reconnu comme un lien de type ("a").

    Quelqu'un aurait une idée du pourquoi?

    Merci par avance pour pour votre réponse.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    un grand calssique, les éléments chargés dynamiquement ne bénéficient pas des affectations du ready poru la simple raison qu'au moment de l'interprétation du ready il n'existent pas sur la page.
    Il faut passer par live() ou delegate() poru attribuer les évènements.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Par défaut
    Bonjour Guizmo95,

    document.ready fonctionne bien, pas de problèmes.

    je n'arrive pas a comprendre ce que tu veux faire exactement, ton explication me semble floue (peut être que je suis mal réveillé...)

    ce que j'ai compris, c'est que tu souhaites qu'une div se remplisse avec le code généré par maPageAChargerDansLeDiv.php ?

    si c'est le cas, tu y es presque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $('a').click(
      function(){
        $('.madiv').load('maPageAChargerDansLeDiv.php');
        return false; //le clique sur le lien ne redirigera pas vers maPageAChargerDansLeDiv.php
    });
    PS: le document.ready attends que toute la page HTML soit entièrement générée et chargée pour exécuter le code que sa fonction anonyme contient.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 74
    Par défaut
    Merci pour vos réponses.

    J'ai eu ma solution!

    J'ai retiré mon ready qui effectivement ne pouvais pas voir les éléments chargés dynamiquement.

    Du coup (pour ceux que ça intéresse ) j'ai déplacé mon script de mon head à mon pied de page, j'ai utilisé delegate() qui fonctionne très bien et j'ai supprimé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("a").click(function(){
    Voici le code :

    Avant (dans le head) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $(document).ready(function () {	
     
      $("a").click(function(){
         // Appel ajax
       });
    return false;		 
    });
    Après (en bas de page => après que le body soit créé ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $("body").delegate("a", "click", function(){	
     
         // Appel ajax
     
    return false;		 
    });
    Encore un grand merci!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/08/2013, 22h02
  2. Réponses: 4
    Dernier message: 19/11/2009, 10h30
  3. jQuery.fn et $(document).ready
    Par adrien334 dans le forum jQuery
    Réponses: 2
    Dernier message: 04/04/2009, 20h22
  4. Réponses: 5
    Dernier message: 22/01/2008, 13h11

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