getElementById retourne null? [fermé]
document.getElementById('id of div that definately exists')
renvoie null.
j'ai initialement chargé le javascript en dernier afin de m'assurer que je n'aurais pas à m'inquiéter de l'événement onload. J'ai aussi essayé d'utiliser l'événement onload. C'est très effrayant. Toute idée ou aide serait grandement appréciée.
3 réponses
elle peut être causée par:
- syntaxe HTML non valide (certaines balises ne sont pas fermées ou erreur similaire)
- Id en Double - il y a deux éléments du DOM HTML avec le même ID
- peut-être que l'élément que vous essayez d'obtenir par ID est créé dynamiquement (chargé par ajax ou créé par script)?
s'il vous plaît, postez votre code.
faites également attention à la façon dont vous exécutez le js sur la page. Par exemple si vous faites quelque chose comme ceci:
(function(window, document, undefined){
var foo = document.getElementById("foo");
console.log(foo);
})(window, document, undefined);
cela retournera null parce que vous appelleriez le document avant qu'il ne soit chargé.
meilleure option..
(function(window, document, undefined){
// code that should be taken care of right away
window.onload = init;
function init(){
// the code to be called when the dom has loaded
// #document has its nodes
}
})(window, document, undefined);
il pourrait y avoir plusieurs raisons pour lesquelles document.getElementById
ne fonctionne pas
-
vous avez une carte d'identité invalide
les signes D'identification et de nom doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis de n'importe quel nombre de lettres, chiffres ([0-9]), traits d'Union ("-"), soulignements ("_"), colonnes (":"), et périodes ("."). (ressource: quelles sont les valeurs valides pour l'attribut id en HTML? )
-
vous avez utilisé un identifiant que vous avez déjà utilisé comme
<meta>
nom dans votre en-tête (par exemple copyright, author... ) il semble bizarre mais m'est arrivé: si vous utilisez IE jeter un oeil à (ressource: http://www.phpied.com/getelementbyid-description-in-ie/ ) -
vous ciblez un élément à l'intérieur d'un cadre ou d'une iframe. Dans ce cas, si l'iframe charge une page dans le même domaine du parent vous devriez viser le
contentdocument
avant de chercher l'élément (ressource: Appeler un numéro à l'intérieur d'un cadre ) -
vous regardez simplement un élément lorsque le noeud n'est pas effectivement chargé dans le DOM, ou peut-être que c'est une simple faute d'orthographe
je doute que vous ayez utilisé la même carte d'identité deux fois ou plus: dans ce cas, document.getElementById
doit retourner au moins le premier élément