Comment le lieu d'une balise de script dans une page d'affecter une fonction JavaScript qui est défini?
J'ai lu que vous devez définir vos fonctions JavaScript dans le <head>
tag, mais comment le lieu de la <script>
(que ce soit dans le <head>
, <body>
, ou toute autre balise) affecter une fonction JavaScript.
Plus précisément, quelle est son incidence sur la portée de la fonction et où vous pouvez appeler à partir d'?
Vous devez vous connecter pour publier un commentaire.
De dire aux gens d'ajouter
<SCRIPT>
seulement dans la tête sons comme une chose raisonnable à faire, mais comme d'autres l'ont dit, il ya beaucoup de raisons pour lesquelles cela n'est pas recommandé ou même pratiques, principalement de la vitesse et de la façon dont les pages HTML sont générées dynamiquement.C'est ce que le Spécification HTML 4 dit :
Et un exemple de code HTML. N'est-il pas l'air joli tout formaté ici 🙂
Et quelque chose à la hâte dans HTML 5 :
Nouvel attribut async dans
<SCRIPT>
:<script async src='...
où que, s'il est manquant, alors il est "faux". Voir: le html 5 de pec pour une explication plus détaillée.Les règles normales de jouer encore debout; ne pas utiliser de trucs avant de elle est définie. 🙂
Aussi, prenez note que le " tout mettre à bas l'avis n'est pas la seule règle dans le livre - dans certains cas, il peut ne pas être possible, et dans d'autres cas, il peut faire plus de sens de mettre le script d'ailleurs.
La principale raison pour mettre un script en bas d'un document est pour la performance, scripts, contrairement à d'autres requêtes HTTP, de ne pas charger en parallèle, ce qui signifie qu'ils ralentit le chargement du reste de votre page. Une autre raison pour mettre les scripts en bas est si vous n'avez pas à utiliser tout 'DOM ready" des fonctions. Depuis la balise script est en dessous de tous les éléments du DOM sera prêt pour la manipulation!
EDIT: à Lire: http://developer.yahoo.com/performance/rules.html#js_bottom
L'un des aspects de placement est la performance. Voir ce bel article dans le YSlow discussion pour pourquoi il est parfois recommandé de les placer au bas du document.
Comme pour les questions de portée, l'habitude, les règles de visibilité pour le Javascript (variables définies à l'intérieur ou à l'extérieur de fonctions, local, global, fermetures, etc.) ne sont pas concernés autant que je sache.
Position de la balise de script qui importe.
Si vous liez une Fonction de l'Élément de document, le document doit être chargé en premier, avant de nous mettre en œuvre la fonction. supposons que getTeachers() est la fonction de getTeachers.js fichier.
Cela vous donnera une erreur:
Il donne une erreur avant de la tête est chargé en premier, et il ne trouve pas d'élément avec l'id spécifié.
Le code ci-dessous est la correction:
Il ne le fait pas. La plupart cadre de la programmation de dispersion des scripts tout au long de la page. Je n'ai que rarement vu des problèmes à cause de ça (et seulement à partir de navigateurs plus anciens).
Si votre script fait référence à un ID sur la page et la page n'a pas été rendu (c'est à dire de script est avant de HTML, ou votre script est exécuté avec onload, plutôt que le DOM est prêt) vous pouvez également faire une erreur.
Si vous tirez Javascript via XMLHttpRequest, comme Diodeus dit, il ne sera probablement pas travailler. Dans mon cas, il n'y a pas d'erreur, le navigateur ignore simplement le nouveau script(s).
J'ai fini avec cela, pas très élégant, mais fonctionne pour moi jusqu'à présent:
http://zeta-puppis.com/2006/03/07/javascript-script-execution-in-innerhtml-the-revenge/
Comment utiliser execJS: http://zeta-puppis.com/2006/02/23/javascript-script-execution-in-innerhtml/
Remarque: faites attention à l'
<
dans cette ligne:for(var i=0;i<st.length; i++)
Si vous avez un script en ligne (en dehors des fonctions) situé à l'avant de fonctions, il peut appeler, vous pouvez obtenir une erreur, car ils ne peuvent peut-être pas encore disponible. Pas en disant que c'est toujours se passer, tout ce qu'il peut, selon le type de navigateur ou une version.
Portée de Javascript règles sont similaires à perl - vous pouvez appeler n'importe quelle fonction à l'actuel ou le plus haut niveau d'étendue. La seule restriction est que la fonction doit être définie au moment de l'appel à elle. La position de la source est hors de propos - que la position dans le temps des questions.
Il faut éviter de mettre les scripts dans le
<head>
si possible car elle ralentit l'affichage de la page (voir le lien Alan posté).