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 :

body onload() non pris en compte


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 145
    Points : 83
    Points
    83
    Par défaut body onload() non pris en compte
    Bonjour

    J'ai un dossier de mon site d'entrainement qui est fait comme ça :

    index.html
    dossier "css"
    dossier "js"
    dossier "img"

    mon fichier html commence comme ça :

    mon code js se résume à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function init(){
     
    	alert('tv');
    }
    La fonction alert() ne s'affiche pas et j'ai le message d'erreur du navigateur qui est :

    caught SyntaxError: Unexpected end of input (at index.js:295:1)
    index.html:17 Uncaught ReferenceError: init is not defined
    at onload (index.html:17:21)
    onload @ index.html:17


    Par contre si je met la fonction alert() à la place de init() dans le body alors elle s'affiche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload=alert('tv')>
    mon code js se résume à ça :

    [CODE]

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Souci de syntaxte ...


  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 896
    Points : 6 655
    Points
    6 655
    Par défaut
    index.html:17 Uncaught ReferenceError: init is not defined
    Les messages d'erreurs ne sont pas un langage magique et sont en général plutôt terre à terre. Ici on te dit que init n'est pas défini. C'est donc qu'au chargement de la page ta fonction init() n'est pas encore connue. je serais prêt à parier que celle ci se trouve dans des balises script situées aprés ta balise body.

    Le probème, c'est que tu mélanges plusieurs manières de faire:
    • une manière consiste à définir ses fonctions dans le head pour qu'elles soient disponibles dans le corp du html.
    • une autre manière qui consiste à placer son code à la fin du html: l'intérêt est que le DOM est disponible.


    Maintenant, déclencher du javascript au sein des balies html est un peu old school et mieux vaut utiliser les gestionnaires d'événements:
    Pour que le DOM soit disponible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    document.addEventListener("DOMContentLoaded", function() {
        function init() {
            alert('truc');
        }
     
        init();
    });
    ou si tu veux que les images soient chargées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    window.addEventListener('load', function() {
        function init() {
            alert('truc');
        }
     
        init();
    });
    Ces codes peuvent être placés n'importe où dans la page, dans le head ou à la fin.

  4. #4
    Membre régulier
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 145
    Points : 83
    Points
    83
    Par défaut
    Merci spacefrog pour ta remarque de code, maintenant ça va marcher

    Merci Cosmo pour ton tuto, j'ai appris un truc super interessant et utile !

    EDIT :
    Mon init dans le body load ne fonctionne pas en l'écrivant comme spacefrog, et je voulais essayer la méthode de Cosmo mais n'y a t'il pas moyen d'avoir mon code dans le fichier js et de l'appeler dans le html ?
    Car avec la méthode de cosmo ça m'oblige à écrire le code dans la page html.

    En attendant pour tester j'ai mis ce code aprés la balise de fin du html et ça marche pas :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script>
      document.addEventListener("DomContentLoaded", function() {
        function init() {
          alert('coucou');
        }
        init();
      })
    </script>

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 896
    Points : 6 655
    Points
    6 655
    Par défaut
    Tu peux tout à fait placer le code dans un fichier js que tu charges dans ta page html.

  6. #6
    Membre régulier
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 145
    Points : 83
    Points
    83
    Par défaut
    Mais alors le code ne sera plus appelé par le chargement de la page html, c'est dommage.
    J'ai besoin que ma page dés qu'elle est chargée appelle la fonction init() qui contiendra beaucoup de code js bientôt.

    Tu as une idée de pourquoi ça ne marche pas en faisant comme toi par les evennements ?

    Je comprend pas pourquoi le pc me dit que init() n'est pas définie alors que la fonction est bien dans le fichier js...


    Résolu !

    J'avais oublié une accolade de fermeture :/
    Merci pour votre aide, c'est génial ce forum !

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

Discussions similaires

  1. [QR 4.05] Propriété imprimante non pris en compte
    Par portu dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 30/09/2008, 14h21
  2. CSS non pris en compte
    Par DragOr dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/06/2006, 13h18
  3. [ASE][SQL]WHERE non pris en compte
    Par Benjamin78 dans le forum Sybase
    Réponses: 1
    Dernier message: 24/03/2006, 12h00
  4. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57
  5. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35

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