Partage
  • Partager sur Facebook
  • Partager sur Twitter

.load() et JQuery

v.2

Sujet résolu
    5 mars 2010 à 14:01:40

    Bonjour tous le monde!
    Mon premier post sur ce forum... pour évidemment exposer un petit souci..!

    Je vous pose donc la situation.
    Je développe un site Web, en PHP, et utilise la libraire Javascript JQuery.
    J'utilise une fonction qui me charges du contenu (PHP et Javascript) dans un <div> particulier.

    Concrètement:
    $('#content').html('<img src="ajax-loader.gif" />');
    $('#content').load(url)
    
    ;

    Le load injecte le contenu du fichier à l'adresse 'url' (variable créée ailleurs...) dans <div id='content'></div>.
    Bon, on pourrait dire: "ça marche" (c'est le cas), mais j'ai un souci.

    J'ai dans le fichier chargé des scripts.
    Et ceux-ci sont la plupart du temps (en effet pas tout le temps, mais dans 90% des cas....) exécutés après l'affichage de la page!

    En clair je pense que le load('fichier.html') injecte le contenu de fichier.html dans le DOM, mais ne se souci pas de savoir si les scripts contenus dans fichier.html sont exécutés avant de l'afficher...


    Donc comment dire: "affiche-moi la page s'il te plait une fois que les scripts sont exécutes!"

    En espérant avoir été assez clair..!!

    Merci de votre aide! :)
    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2010 à 14:20:21

      Pourrait-on voir la page que tu inclues, et donc les scripts concernés ?
      • Partager sur Facebook
      • Partager sur Twitter
        5 mars 2010 à 14:29:25

        Hello Golmote, merci de ton intérêt!

        C'est une fonction que j'utilise très souvent, je charge beaucoup beaucoup de code...

        Voila un exemple de scripts que je peux charger, et qui posent soucis...
        <script src="js/corner.js" type="text/javascript"></script>
        <script type="text/javascript">
        /* <![CDATA[ */ 
        	$(function(){
        		// Tabs
        		$("#party-tabs").tabs();
        	});
         /* ]]> */
        </script>
        


        Le premier script me permet d'arrondir les angles des bordures de mes divs.
        Et typiquement, on voit rapidement les les bordures carrées, puis elles s'arrondissent.

        Le second script lui est un widget JQuery qui me permet d'avoir des tabs. Et ceux-ci se créent après l'affiche de la page (ça fait un truc moche où on voit des <a></a> qui se transforment en tabs...)

        Voila!
        • Partager sur Facebook
        • Partager sur Twitter
          5 mars 2010 à 14:32:51

          Bah en même temps, ces fonctions sont exécutés lors de l'événement onload (enfin document ready avec jQuery), donc elles sont exécutées une fois le contenu inséré...

          La solution que je vois, ce serait de masquer le contenu lors de l'insertion, puis de l'afficher une fois insérer. Ca permettrait peut-être de laisser aux scripts le temps de s'exécuter... ? :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            5 mars 2010 à 14:37:54

            Parfait tu as mis le doigt sur le problème, ce qui est une grande aide!

            J'ai pensé et essayé ta solution, mais pas très propre et ne fonctionne pas...

            Mais en effet, les fonctions sont sur le document.ready(), comment ça pourrait les exécuter avant...
            Mais ça arrive des fois. De temps en temps, mon gif reste affiché jusqu'à que tout soit chargé...
            Donc je me dis que ça doit être possible.

            Si quelqu'un trouve une solution, je prends!!!

            Merci beaucoup Golmote. Si tu as d'autres idées...
            • Partager sur Facebook
            • Partager sur Twitter
              5 mars 2010 à 14:42:15

              Pas très propre, mais en même temps je crois pas qu'il y ait 40000 solutions... :-°

              Ajoute un petit timeout pour laisser le temps aux scripts de charger... genre... 500ms ? Peut-être même moins. Ca te permettra d'ésquiver la plupart du temps le bug, je suppose.
              • Partager sur Facebook
              • Partager sur Twitter
                5 mars 2010 à 14:50:19

                Ok alors je vais voir de ce côté!
                Merci pour ton aide.

                Je reste ouvert à toute autre idée..!

                Edit: en jouant avec les fadeIn, fadeOut, je pourrais peut-être arrivé à quelque chose de joli...!
                Edit 2:

                Voici ma solution:
                $('#content').css("display","none");
                $('#content').load(urlComplete,null, function()
                	  {
                	    $('#content').css("display","block");
                          });
                


                Merci Golmote!
                • Partager sur Facebook
                • Partager sur Twitter

                .load() et JQuery

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown