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 :

Appel d'une fonction javascript dans une page courante


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut Appel d'une fonction javascript dans une page courante
    Bonjour,
    Voila j'ai un petit problème avec l'appel d'une fonction javascript.
    je m'explique , je dois appeler une fonction javascript à la fin d'un ensemble d'action PHP.
    Cette appel doit lancer une animation flash mais enfaite si je met ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <script type="text/javascript">
       alert("");
       ajoute("type","valeur");
    </script>';
    Tout est ok, cependant si j'enleve le alert(), mon animation ne ce lance pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script type="text/javascript">
       ajoute("type","valeur");
    </script>';
    Enfaite ce qui est bizarre , c'est qu'avec le alert(), tout fonctionne comme il faut
    mais dés que je l'enleve ca déconne a plein bloc o_O

    Quelqu'un à une idée?

    merci

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Quelqu'un à une idée?
    Difficile d'en avoir une vu le peu d'informations que tu donnes

    Mais bon, vu le symptôme, j'imagine que tu appelles la fonction ajoute après un appel AJAX sans avoir attendu que la réponse du serveur soit arrivée.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Merci de votre réponse.
    QUe voulez savoir de plus ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben à quoi correspond ta fonction ajoute par exemple
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Ma fonction ajoute appelle une animation flash voila son contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function ajoute(type,valeur) {
    	swfobject.getObjectById("flash").ajoute(type,valeur);
    }
    En gros elle fournit des paramètres pour personnaliser l'animation flash

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Montre nous où est fait l'appel à cette fonction, ça ressemble à un DOM qui n'a pas le temps de se charger... ton extrait serait placé dans le head que ça ne m'étonnerait qu'à moitié ^^

  7. #7
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    La définition de la fonction

    (javascript)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    function ajoute(type,valeur) {
    	swfobject.getObjectById("flash").ajoute(type,valeur);
    }
    se fait bien avant un </head>

    Moi j'appel cette fonction dans les balises body

    (php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    echo '<script type="text/javascript">
                ajoute("type","valeur");
         </script>';
    Et le flash se trouve au début du contenu de <body></body>

    Sachant que je viens de remarquer que sous IE (quelques fois) cela fonctionne c'est à dire que l'animation flash se lance normalement .
    Mais sous Firefox c'est pas le cas.

  8. #8
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Laisse à ta page le temps de charger le DOM ^^ place ton appel à la fonction ajoute sur l'événement "load" du body.

  9. #9
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    J'ai peur de ne pas tout comprendre.
    Je fais un <body onload="javascript:ajoute....

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben oui, mais ça on ne peut pas le deviner, donc à moins de poster TOUTES les informations utiles, on ne pourra pas t'aider !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Ben sachant que le projet fait quelques milliers de lignes , qu'il comprend des inclusions de fichiers , je ne vais pas pouvoir vous poster tout le code (ca risque d'être lourd )
    Mais j'y pense, si je lance un objet ajax pour cette fonction , si j'attend la réponse du serveur (savoir si le flash est lancé ou pas), ca peut le faire non?

    J'ajoute que la fonction ajoute permet de lancer une animation flash , je m'explique : ajoute fournis les paramètres à une animation flash(action script), depuis ces paramètres , le flash affiche un texte pour simplifier la chose.
    Je fournis le type et la valeur, j'appelle cette fonction depuis du php , par contre quand j'appelle cette fonction ajoute depuis un jeu flash , tout est ok.

  12. #12
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par Gollum02 Voir le message
    […] le projet fait quelques milliers de lignes […]
    Pour un site web ? Aïe aïe aïe… Qui paye la bande passante ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #13
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Pour un site web ? Aïe aïe aïe… Qui paye la bande passante ?
    Ce n'est pas moi
    Enfaite je reprend la relève d'un ancien dev.

  14. #14
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par Gollum02 Voir le message
    J'ai peur de ne pas tout comprendre.
    Je fais un <body onload="javascript:ajoute....
    La syntaxe que tu sembles chercher est la suivante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="ajoute();">
    (la mention javascript: étant inutile dans un gestionnaire d'événement)

    Même si ça marche, ce n'est pas la meilleure manière de faire, notamment au cas où d'autres fonctions soient associées à ce gestionnaire d'événement, par exemple si dans ton code JS il y a quelquepart :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.body.onload = function() {
       // bla bla bla...
    };
    (auquel cas la fonction attribuée en JS "écrase" celle attribuée dans l'HTML )

    Idéalement, on les ajoute depuis le code JS, avec attachEvent pour IE et addEventListener pour tous les autres, par le biais d'une fonction du genre :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Element.prototype.addEvent = function(declencheur, effet) {
       if (this.addEventListener) {
          this.addEventListener(declencheur, effet, false);
       }
       else if (this.attachEvent) {
          this.attachEvent(("on" + declencheur), effet);
       }
    }
     
    // exemple d'appel :
    var elem = document.getElementById("idDeTonElement");
    elem.addEvent("load", ajoute);// attention : pas de parenthèses après "ajoute" ici
    // car on n'execute pas la fonction, on copie sa référence
    Tiens-nous au jus ^^

  15. #15
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Merci beaucoup pour ton aide mais rien ne change, je peux m'y prendre mal, mais si je comprend bien, si je test <body onload="ajoute"> cela doit resumer ton javascript ?
    Si c'est le cas, cela ne fonctionne pas.

    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
     
       echo '<script type="text/javascript">
     
               Element.prototype.addEvent = function(declencheur, effet) {
                   if (this.addEventListener) {
                      this.addEventListener(declencheur, effet, false);
                   }
                   else if (this.attachEvent) {
                      this.attachEvent(("on" + declencheur), effet);
                   }
                }
               var elem = document.getElementById("test");
               elem.addEvent("load", ajoute);
     
            </script>';
    Sachant que j'ai mis un
    Mais aussi, il faut que j'appel la fonction avec ses paramêtres

    merci encore

  16. #16
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Element.prototype.addEvent = function(declencheur, effet) {
       if (this.addEventListener) {
          this.addEventListener(declencheur, effet, false);
       }
       else if (this.attachEvent) {
          this.attachEvent(("on" + declencheur), effet);
       }
    }
    Attention : ne sera pas valable pour IE < 8 !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  17. #17
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par Gollum02 Voir le message
    Merci beaucoup pour ton aide mais rien ne change, je peux m'y prendre mal, mais si je comprend bien, si je test <body onload="ajoute"> cela doit resumer ton javascript ?
    Si c'est le cas, cela ne fonctionne pas.

    Citation Envoyé par RomainVALERI Voir le message
    La syntaxe que tu sembles chercher est la suivante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="ajoute();">
    Je ne pense pas que tu t'y prennes mal, ni que tu comprennes mal, mais plutôt que tu lis mal (enfin, sur ce post, hein ^^)

    Citation Envoyé par Bovino
    Attention : ne sera pas valable pour IE < 8 !
    Oui c'est juste j'ai voulu expliquer le principe mais dans le détail pour la compatibilité avec les brontos... heu les anciens navigateurs je ne sais plus comment on procédait... j'ai l'impression de me souvenir de quelque chose comme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Element.prototype.addEvent = function(declencheur, effet) {
       if (this.addEventListener) {
          this.addEventListener(declencheur, effet, false);
       }
       else if (this.attachEvent) {
          this.attachEvent(("on" + declencheur), effet);
       }
       else {
          window[this+declencheur] = effet;
       }
    }
    ...ou quelque chose autour de window[] ... mais c'était peut-être dans mon rêve de cette nuit () donc je ne garantis rien ^^ disons : à tester éventuellement

    Citation Envoyé par Gollum02
    Mais aussi, il faut que j'appel la fonction avec ses paramêtres
    Ah tiens je les avais oubliés ceux-là

    Utilise un gestionnaire (sans paramètres) dans lequel tu appelles la fonction ajoute(param1, param2); plutot que de transformer ta fonction ajoute en gestionnaire c'est clair ? ^^

    Ou même une fonction anonyme :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    elem.addEvent("load", function() {
       ajoute("type", "valeur");
    });

  18. #18
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Element.prototype.addEvent = function(declencheur, effet) {
       if (this.addEventListener) {
          this.addEventListener(declencheur, effet, false);
       }
       else if (this.attachEvent) {
          this.attachEvent(("on" + declencheur), effet);
       }
       else {
          window[this+declencheur] = effet;
       }
    }
    Non, c'est juste qu'avec IE < 8, tu n'as pas accès à Element, donc impossible d'effectuer le prototypage

    Pour ma part, j'utilise la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var addEvent = function(elt, declencheur, effet) {
       if (.addEventListener) {
          elt.addEventListener(declencheur, effet, false);
          addEvent = function(elt, declencheur, effet){elt.addEventListener(declencheur, effet, false);}
       }
       else if (elt.attachEvent) {
          elt.attachEvent(("on" + declencheur), effet);
          addEvent = function(elt, declencheur, effet) {elt.attachEvent(("on" + declencheur), effet);}
       }
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  19. #19
    Membre averti
    Profil pro
    CEO
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CEO

    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Par défaut
    Merci pour votre aide, je regarde ca et je vous tiens au courant

  20. #20
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Pour ma part…

    Pourquoi mettre un if dans la fonction addEvent, quand on peut le mettre autour ?

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var addEvent;
    if (document.all) {
        addEvent = function(obj, evt, func) {
            obj.attachEvent('on' + evt, func);
        };
    } else {
        addEvent = function(obj, evt, func) {
            obj.addEventListener(evt, func, false);
        };
    };
    Comme ça le test n’est fait qu’une fois
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. appeler une fonction php dans une fonction javaScript
    Par geeksDeve dans le forum Langage
    Réponses: 3
    Dernier message: 17/04/2012, 15h30
  2. Réponses: 10
    Dernier message: 14/03/2009, 13h36
  3. [AJAX] Appel d'une fonction javascript dans une page chargée en ajax
    Par baedal dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 17/04/2008, 17h03
  4. Réponses: 1
    Dernier message: 25/10/2007, 21h25

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