“getElementsByTagName(...)[0]” n'est pas défini?
J'ai le code suivant, qui en gros permet de parcourir un tas d'images.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var num = 1;
img = document.getElementsByTagName("img")[0];
hbutton = document.getElementsByTagName("h1")[0];
hbutton.onclick = function() {
num += 1;
img.src = num + ".jpg";
}
</script>
</head>
<body>
<h1>Press Here!</h1>
<img src = "1.jpg"></img>
</body>
</html>
Pour une raison quelconque, quand je le lance, rien ne se passe, en raison de l'erreur suivante est affichée par ma console Firebug.
hbutton is undefined
---
hbutton.onclick = function() {
Quand je lance juste le JS fois la page chargée, cependant, il fonctionne parfaitement bien!!! Pourquoi est-ce?
Ce n'est pas bizarre, c'est prévu... j'ai mis à jour le titre avec de vrais symptômes. Cherchez les questions relatives à
Oups, c'est légèrement différent avec
double possible de getElementById() renvoie null même si l'élément existe
Double Possible de Pourquoi jQuery ou une méthode DOM comme getElementById pas de trouver l'élément?
getElementById
et undefined
. C'est la même idée.Oups, c'est légèrement différent avec
getElementById
(voir "getElementById null"). Dans ce cas, il n'est pas défini car getElementsByTagName
renvoie un tableau vide [comme] objet emptyArray[0]
résultats dans undefined
. En tout cas, voir d'autres question.double possible de getElementById() renvoie null même si l'élément existe
Double Possible de Pourquoi jQuery ou une méthode DOM comme getElementById pas de trouver l'élément?
OriginalL'auteur Bobby Tables | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Votre code est en cours d'exécution avant la balise h1 est défini. Vous devez l'exécuter dans le gestionnaire onload ou de le mettre juste avant /corps
document.getElementsByTagName("h1")[0]
est de retourundefined
parce que @Julian dit, la balise n'existe pas lorsque le code est exécuté. Vient l'erreur lorsque vous essayez de définironclick
surundefined
.OriginalL'auteur Julian
JavaScript est interprété de haut en bas. Donc, à l'endroit où votre
<script>
s'exécute, pas deh1
les balises ne sont pas encore connus.Essayer de mettre la
<script>
-Tag en bas de votre page. Sinon, si vous avez besoin du script au début de la page, un onLoad-Gestionnaire qui pourraient vous aider:OriginalL'auteur Lukx
Lorsque vous le mettez dans l'en-tête, vos h1 n'est pas encore chargé. hbutton devient indéfini, n'est pas un objet. Ensuite, lorsque vous essayez de définir .onclick, il se casse parce que vous ne pouvez pas définir les propriétés de quelque chose d'indéfini. Lorsque vous placez le code dans le corps, votre h1 est déjà chargé, de sorte que le code fonctionne comme prévu.
Vous pouvez résoudre ce problème en laissant votre code en haut, mais seulement l'appeler après un événement onload.
OriginalL'auteur Joel
La tête est exécuté avant que le dom est chargé. Le mettre sur le bouton de la page ou de mettre une fonction onload de la balise body.
Il ne peut pas trouver le document.getElementsByTagName("img") lorsque le Document n'est pas encore prêt, car il n'est tout simplement pas encore là.
ou simplement faire ceci:
OriginalL'auteur Michael Koper
Le problème est que le script est exécuté immédiatement, il est rencontré lors du chargement de la page.
Depuis, il est au sommet de la page, dans l'en-tête, cela signifie qu'il est exécuté avant que la page est chargée de la
<h1>
élément (ou tout du reste du corps).Par conséquent, quand il vous le demande
getElementsByTagName('h1')
, il n'y a pas tout les éléments correspondants à ce moment dans le temps.Vous devez:
* déplacer le code à la fin du script.
* ou l'envelopper dans une fonction, et de déclencher la fonction à exécuter lorsque la page a fini de charger -- ie utiliser le
onload
méthode.OriginalL'auteur Spudley