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 :

"Séparer" plusieurs chargements de fonction avec onload


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut "Séparer" plusieurs chargements de fonction avec onload
    Ami(e)s bonjour.


    1er problème :

    Bon voilà j'ai trois fonctions que je dois charger sur une même page.
    Mais pour pouvoir utiliser "3 fois" onload il faut trafficauté un p'tit poil. Voici ce que ça donne grâce a un tutoriel Javascript que j'ai trouvé sur le site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     /* Fonction de stockage des scripts à charger */
    function addEvent(obj, event, fonct) {
        if (obj.attachEvent) //Est-ce IE ?
            obj.attachEvent("on" + event, fonct); //Ne pas oublier le "on"
        else
            obj.addEventListener(event, fonct, true);
    }
    function lancer(fonct) {
        addEvent(window, "load", fonct);
    }
    ça pas de problème pour le comprendre c'est relativement simple.
    Donc je l'utilise de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lancer(ejs_box2_go()); /* evenement */
    lancer(diapo());
    lancer(HorlogeDynamique());


    Or si l'une de mes trois fonctions ne fonctionnent pas (ça c'est le problème suivant )
    Aucune ne fontionne. Donc ma question est la suivante :

    Comment faire en sorte que s'il y a une ou deux fonctions qui fonctionne sur la totalité que celle qui doivent être activé fonctionne?



    2ème Problème :


    Voici le code javascript de ma fonction :
    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
    42
    43
    44
    45
    /* Evenement */
    ejs_box2_message = new Array;
    ejs_box2_message[0] = 'Votre texte<br></a>';
    ejs_box2_message[1] = '*Encore votre texte* <br></a>';
    ejs_box2_message[2] = 'cartes  gratuites<br><a href="http://www.ld.org" target="_blank" class="news">[En savoir plus]<br></a>';
    ejs_box2_message[3] = '  votre texte*<br></a>';
    ejs_box2_message[4] = '  votre texte<br><a href="http://www.ld.org" target="_blank" class="news">[En savoir plus]<br></a>';
    ejs_box2_message[5] = ' *texte...texte...*<br></a>';
    ejs_box2_message[6] = ' texte.texte!!<br></a>';
    ejs_box2_message[7] = ' *texte texte*<br></a>';
    ejs_box2_message[8] = ' TEXTE TEXTE<br></a>';
    ejs_box2_actual = 0;
    ejs_box2_html_flag =0;
    function ejs_box2_go()
     {
     	if(document.getElementById)
     		{
     		ejs_box2_char = 3;
     		ejs_box2_affich(ejs_box2_actual)
     		ejs_box2_actual++;
     		if(ejs_box2_actual >= ejs_box2_message.length)
     			ejs_box2_actual = 0;
     		}		
     }
    function ejs_box2_affich(lactual)
     {
     	var pix = ejs_box2_message[lactual].charAt(ejs_box2_char);
     	if(pix == "<")
     		ejs_box2_html_flag = 1;
     	if(pix == ">")
     		ejs_box2_html_flag = 0;
     	var texte = ejs_box2_message[lactual].substring(0,ejs_box2_char);
     	document.getElementById("evenement").innerHTML = texte; // nom de l'id qui affichera le texte
     	if(ejs_box2_char < ejs_box2_message[lactual].length)
     		{
    		ejs_box2_char++;
     		if(ejs_box2_html_flag == 1)	
     			ejs_box2_affich(lactual);
     		else
     			setTimeout("ejs_box2_affich("+lactual+")",50)
     		}
     	else
    		setTimeout("ejs_box2_go()",3000)
    }
    lancer(ejs_box2_go()); /* evenement */


    Ce code javascript affiche une à une les lettre des textes mis dans le tableau.
    Or dans mon code html l'id evenement y est bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id="evenement" > 
    </div> <!-- evenement -->

    Une image (firebug): http://www.monsterup.com/upload/1261230494279.jpg


    Pourquoi ne trouve - t -il pas l'id "evenement" ?

    Merci de votre aide

  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
    Salut et bienvenue sur developpez.com

    Citation Envoyé par Nico1218 Voir le message
    ça pas de problème pour le comprendre c'est relativement simple.
    Apparemment pas tant que ça

    Dans la notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function addEvent(obj, event, fonct)
    fonct est une référence à la fonction fonct. En revanche, ta notation équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function addEvent(obj, event, fonct())
    or là, fonct() ne fait plus référence à la fonction, mais au résultat de la fonction, ce qui signifie que la fonction est lancée avant que la page n'ai fini de se charger, c'est-à-dire dans le cadre de ton problème n°2, avant que la div "evenement" ne soit intégrée à la page. D'où ton problème
    En remplaçant les appels par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lancer(ejs_box2_go); /* evenement */
    lancer(diapo);
    lancer(HorlogeDynamique);
    cela devrait rentrer dans l'ordre.

    EDIT : Au passage, ton affichage caractère par caractère est assez pourri, puisque les éléments de ton tableau contiennent des tags HTML... du coup, tu vas obtenir un affichage assez aléatoire.
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    Merci de ton aide.
    Je suis débutant en javascript, très débutant
    Bon tu me dis :
    En remplaçant les appels par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lancer(ejs_box2_go); /* evenement */
    lancer(diapo);
    lancer(HorlogeDynamique);cela devrait rentrer dans l'ordre.
    Mais je fais déjà comme ça en faite
    Ou alors j'ai mal compris.
    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
     
    //Definition des fonctions horloge et compagnie au dessus 
    /* Fonction de stockage des scripts à charger */
    function addEvent(obj, event, fonct) {
        if (obj.attachEvent) //Est-ce IE ?
            obj.attachEvent("on" + event, fonct); //Ne pas oublier le "on"
        else
            obj.addEventListener(event, fonct, true);
    }
    function lancer(fonct) {
        addEvent(window, "load", fonct);
    }
     
    lancer(ejs_box2_go()); /* evenement */
    lancer(diapo());
    lancer(HorlogeDynamique());
    Voilà merci de vous intéresser à mon sujet

  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
    Non, tu n'as pas lu ma réponse !
    Toi tu appelles
    alors qu'il faut appeler
    Il y a une grosse différence entre ejs_box2_go() et ejs_box2_go.
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Par défaut
    Ah pardon ! Je n'avais pas compris en faite. Je croyais que tu disais que c'était identique. Bon maintenant effectivement ça fonctionne. Je n'avais pas bien saisi la différence entre les deux ^^ Merci beaucoup de ton aide
    Rolalala un long chemin me reste à parcourir avant de devir un pro du javascript

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

Discussions similaires

  1. appel multiple de fonction avec onload
    Par socaw dans le forum Web
    Réponses: 3
    Dernier message: 25/05/2010, 16h00
  2. Réponses: 3
    Dernier message: 25/07/2006, 09h25

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