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 :

Place de l'appel à routine JS dans un document HTML


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut Place de l'appel à routine JS dans un document HTML
    Bonjour,

    La plupart des ouvrages sur JS recommandent de placer l'appel à une routine dans la section <head> d'un document HTML.
    Or cela ne fonctionne pas à tous les coups .

    Quand doit-on placer l'appel à une routine JS , au contaire, à la fin du document HTML ?

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    En général, tout le JS peut être chargé dans le HEAD.

    Sans le contexte - code CSS, HTML et JS - il est difficile de répondre autre chose que des généralités.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    En général, tout le JS peut être chargé dans le HEAD.

    Sans le contexte - code CSS, HTML et JS - il est difficile de répondre autre chose que des généralités.
    Et bien, par exemple avec cette routine JS que je vous avais soumis, il y a quelques jours, pour debuggage

    http://www.developpez.net/forums/d15...ffichage-page/

    Si on appelle le fichier externe JS dans la section <head> ça ne fonctionne pas; alors que si l'appel est mis à la fin du <body> ça fonctionne.

    Je voudrai bien comprendre pourquoi .
    Est-ce à cause des GetElementById ?

  4. #4
    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 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    pour appeler un element du DOM avec getElementById, encore faut-il qu'il existe au moment de l'appel ...

    Ce qui n'est pas le cas de ton script si tu le place dans le head

    Il faudrait dans ce cas mettre ton code dans une fonction appelée sur le onload de la page, une fois que les éléments existent

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Est-ce qu'en général, il est toujours possible (et préférable) de mettre l'appel de la routine JS dans la section <head> du document HTML car si on doit la mettre à un autre endroit pour qu'elle fonctionne, il vaut mieux la ré-ecrire différemment ?

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Si vous placez votre code juste avant le tag </body> il fonctionnera.

    Mais dans le HEAD il faut attendre la fin de la construction du DOM ou la fin du chargement de la page (pour manipuler la structure de la page, une image ou un canvas).

    Exemple avec vos codes.

    Fichier routine.js :

    Code javascript : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    'use strict';
     
    document.addEventListener( 'DOMContentLoaded', function( ev ){
     
      // code
     
    }, false );
     
    window.addEventListener( 'load', function( ev ){
     
      // Auditeur d'évènement pour le bouton ajouter
      var vBtnAj=document.getElementById("btnAjoute");
     
      vBtnAj.addEventListener("click",recupererDesir);
     
      //Auditeur d'évènement pour le bouton afficher
      var vBtnAff=document.getElementById("btnAffiche");
     
      vBtnAff.addEventListener("click",afficherListe);
     
      // creation tableau
      var maListe=[];
     
      //  variable maZoneListe
      var maZoneListe=document.getElementById("uListe");
     
      function recupererDesir() {
        var vDesir=document.getElementById("jeVeux");
     
        insererDansListe(vDesir);
        viderChamp(vDesir);
      }
     
      function insererDansListe(nouvDesir) {
        maListe.push(nouvDesir.value);
     
        var nouvEntree=document.createElement("li");
     
        nouvEntree.innerHTML=maListe[maListe.length-1];
        maZoneListe.appendChild(nouvEntree);
      }
     
      // affichage de la liste
      function afficherListe() {
        var vPL=document.getElementById("pageListe");
        var vZF= document.getElementById("zoneFormulaire");
     
        vZF.style.display="none";
        vPL.className="classAff";
        maZoneListe.innerHTML="";
        maListe.sort();
     
        var uListe = document.getElementById( "uListe"); // uListe !!!
     
        for ( var i = 0; i < maListe.length; i++ ){ // length !!! pas lenght
          uListe.innerHTML += '<li>' + maListe[i] + '</li>';
        }
      }
     
      // effacement de ce qui a été saisi
      function viderChamp(idChamp) {
        idChamp.value="";
      }
     
    }, false );

    Fichier routine.html :

    Code html : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
      <meta http-equiv="cache-control" content="public, max-age=60">
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="author" content="Daniel Hagnoul">
      <title>Test</title>
      <style>
        body {
          font-family :Arial,sans-serif;
        }
        #pageListe.classAff {
          background-color:#FAF2AD;
          padding:20px;
          font-family: cursive;
        }
        #pageListe.classAff ul {
          margin: 10px 0px ;
          padding: 0px ;
          border-left:4px double red ;
        }
        #pageListe.classAff li {
          list-style-type:none;
          margin: 0px -20px;
          padding-left: 26px;
          border-bottom: 1px solid blue;
          line-height: 36px;
          font-size: 24px;
          font-family:cursive;
        }
      </style>
      <script src="routine.js"></script>
    </head>
    <body>
     
      <div id="pageListe">
        <h1> Faire une liste</h1>
     
        <div id="zoneFormulaire"> <!-- au lieu de zoneformulaire !!! -->
     
          <label> Voici mon choix : <input type="text" id="jeVeux" /> </label>
     
          <!-- bouton d'ajout -->
          <button type="button" id ="btnAjoute"> AJOUTER</button>
     
          <br /> <br />
     
          <button type="button" id ="btnAffiche"> AFFICHAGE</button>
        </div>
     
        <ul id="uListe"></ul>
      </div>
     
    </body>
    </html>

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut
    D'accord.

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

Discussions similaires

  1. Appel de PHP dans un fichier HTML
    Par peltiarn dans le forum Langage
    Réponses: 10
    Dernier message: 04/06/2014, 15h23
  2. Appel de fonction dans du code html
    Par florianjoy54 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2011, 12h48
  3. [AJAX] Appel code asp dans un fichier html
    Par maxou2009 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/11/2008, 16h48
  4. exportation d'une valeur dans un document html
    Par acd dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/11/2005, 21h34
  5. [débutant] appeler plusieurs methodes dans une page html
    Par soulhouf dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/08/2005, 19h20

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