Pourquoi est-getElementsByTagName retour indéfini?
Je suis en train d'appeler document.getElementsByTagName
, et je suis de retour undefined
comme conséquence, n'importe quel paramètre je passe. (Même si je passe "*".)
J'ai essayé de Googler pour elle, mais tous les résultats de la recherche ont été les éléments de la getElementsByTagName tableau résultat est indéfini. Ce que j'obtiens est undefined
que le résultat lui-même, et il me conduit dans le mur.
Personne ne sait ce qui peut en être la cause? (À L'Aide De Firefox 12.0. Dans google Chrome, j'ai obtenu les résultats escomptés.)
EDIT: OK, voici un exemple de code:
function buttonClick(){
var xhr = new XMLHttpRequest();
var msg = document.getElementById('message');
var buttons = document.getElementsByTagName("button");
var button, i;
for (i = 0; i < buttons.length; ++i){
button = buttons[i];
msg.removeChild(button);
}
xhr.onreadystatechange = function() {
if(xhr.readyState == 4){
handleResult(xhr.responseText, msg);
}
};
xhr.open("POST", location.href, true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("cmd=MyCommand");
}
Et la getElementsByTagName
retourne toujours undefined
, si je trace dans Firebug de l'onglet Script ou d'appel à partir de l'onglet Console. (Également dans Firebug, puisque cela semble être embrouiller les gens. Apparemment il y a trop de consoles flottant autour.).
Comme preuve, voici ce que j'ai reçu lorsque j'ai essayé d'utiliser la console de Firebug:
>>> document.getElementsByTagName("button");
undefined
>>> msg.getElementsByTagName("button");
undefined
>>> msg.getElementsByTagName
getElementsByTagName()
>>> msg.getElementsByTagName("BUTTON");
undefined
>>> msg.getElementsByTagName("*");
undefined
>>> document.getElementsByTagName("*");
undefined
>>> document.getElementsByTagName("body");
undefined
Le balisage est (ou devrait être) pas pertinent. Il est valide et bien formé page HTML avec des boutons et d'autres éléments sur elle. Cette fonction JS est attaché à la onclick
de l'un de ces boutons. Mais il ressemble à quelque chose comme ceci:
<html xmlns="http://www.w3.org/1999/xhtml"><head>
blah
</head>
<body>
<script type="text/javascript" src="/myJS.js"></script>
<div id="page-container">
<div id="message"><button onclick="buttonClick();">Button 1</button><button onclick="ButtonClick2()">Button 2</button></div>
</div>
</body></html>
undefined
, même quand il n'y a pas de matches. Êtes-vous d'essais dans la console, ou sur une page?Avez-vous essayé de lancer le JavaScript après les éléments sont chargés dans les DOM? Mettre le
<script>...</script>
juste avant la fermeture </body>
tag? Ou dans un <body onload="functionName()">
événement onload?Violon démos: jsfiddle.net/5nQDc
Je ne vois pas où vous vous connectez à la console. Peut-être une faute de frappe? Peut-être
console.log(button)
, laissant le s
? Peut-être que vous vous connectez à l'extérieur de l'étendue de la variable? Peut-être que vous êtes affecté par la nature asynchrone des requêtes xhr?Vous n'étiez pas explicite sur ce que vous faisiez dans la console. Si vous êtes l'exécution de
getElementsByTagName
directement dans la console, mais vous êtes en train de faire var foo = document.getElem...
, il sera montré que undefined
.OriginalL'auteur Mason Wheeler | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
edit:
C'est un bug dans firebug et est fixé par la mise à niveau vers 1.10.0a7
Car il est impossible pour cette méthode pour retourner
undefined
, il y a 2 possibilités:document.getElementsByTagName
est pas référence à l'hôte d'origine de l'objet. Elle doit imprimerfunction getElementsByTagName() {[native code]}
lorsque référencé dans la console.Vous devriez être en mesure de manière fiable, pour voir si elle est en fait
undefined
(dans firefox) avec ceci:La
delete
est un NOOP siwindow.alert
est déjà le référencement de l'hôte d'origine de l'objet, autrementil sera de restaurer.
Si il alertes
undefined
, vous devriez être en mesure de fairepour restaurer l'objet hôte de référence.
De la console dans les références renvoient à la fonction intégrée dans la Console Web qui vient avec firefox par défaut.
Nope. Il n'y a aucun code en cours de chargement pour modifier les objets hôte. C'est très simple page avec de très simple script. Si je faisais quelque chose de compliqué comme cela, ce serait certainement le premier suspect!
Wheeler: je suis désolé pour vous écoute, mais pourriez-vous s'il vous plaît poster ce
document.getElementsByTagName + ""
donne? Juste pour s'assurer que c'est la fonction native.Je suis confus. Que Firebug également des impacts réels du code JavaScript ne pas exécuter de Firebug?
d'accord, bon exemple de cela est la chasse aux sorcières dans chrome console où vous vous connectez les références de l'objet directement et l'état instantané n'est pas réellement prise, jusqu'à ce que vous développez manuellement dans la console.
OriginalL'auteur Esailija
N'est pas REPL autonome, indépendant du navigateur JavaScript environnement? Alors que, dans votre cas, il arrive d'être en cours d'exécution dans votre navigateur quand un plugin, il est censé imiter une "salle blanche" pour dire...
Pour résumer ce type de réponse: document.getElementById() renvoie null lors de l'utilisation mozrepl (mais pas dans firebug)
Par défaut, vous r'dans le navigateur contexte, et non le document.
Essayez ceci pour passer le document à la place:
C'est toujours de me donner les résultats attendus de l'avant. Et j'ai le même problème lors de l'exécution du script.
Semblait avoir travaillé pour que guy. Pensé qu'il serait vaut le coup! Je suppose que nous allons garder sur camion'n.
Je ne suis pas en utilisant mozrepl, je suis à l'aide de Firebug.
OriginalL'auteur Ayman Safadi
J'ai eu le problème quand j'ai fait un difficile de voir l'erreur de syntaxe. J'ai utilisé parenthèse quand j'aurais utilisé carré crochets
Mal:
Droite:
Voir la différence? Remarque, le haut de la syntaxe fonctionne est les anciennes versions d'IE, comme IE8, mais il ne fonctionne pas dans ie10, ie11, Edge, etc
OriginalL'auteur Tom McDonald
Vous ne pouvez pas alerter un
Array
, vous devriez faire une boucle for pour alerter. Exemple:OriginalL'auteur user10941360