2010-10-10 6 views
0

débutant ici ... Que manque-t-il?javascript: impossible d'utiliser une variable globale dans une fonction, pour naviguer dans le dom

i définir une variable globale qui est une référence à un élément HTML:

  var x=document.getElementById("xxx1"); 

puis, à l'intérieur d'une fonction essayer de référencer cette variable pour naviguer dans le dom:

 x.innerHTML="dsfgfdgdf"; 

.. ça ne marche pas; si je définis la variable dans la fonction cela fonctionne, mais je ne vois pas comment c'est un problème de portée ... travailler avec des variables globales dans les fonctions fonctionne bien SI je ne les utilise pas dans un contexte dom (object.property)

merci

Répondre

2

Ce n'est pas un problème de portée.

La raison la plus probable est que l'élément n'existe pas encore lorsque vous créez la variable. Vous devez placer l'élément de script qui crée la variable après l'élément auquel vous souhaitez accéder, car le code sera exécuté pendant le chargement de la page.

Une autre alternative consiste à déclarer la variable à l'échelle mondiale, et le mettre de l'événement onload qui court après la page chargée:

<script> 

var x; 

function init() { 
    x = document.getElementById('xxx1'); 
} 

</script> 

<body onload="init();"> 
2

Le getElementById est-il exécuté avant le chargement du DOM? (vous devez attendre domready ou onload)

Est-il possible que vous remplaciez la valeur d'une autre fonction?

+0

Eh oui ... le Royaume n'a pas été chargé – bogdan

+0

la variable déclarée dans une fonction exécutée sur onload ... merci – bogdan

+0

@bogdan: Pas de problème, c'est une erreur de débutant très commune. – some

1

Je pense que le problème peut être que si vous déclarez cette variable à l'échelle mondiale, lorsque cette ligne est évaluée le DOM n'est pas totalement chargé et donc l'élément n'est pas accessible.

Lorsque vous le déclarez dans la fonction, la variable ne sera créée que lorsque vous appellerez cette fonction, alors que le DOM sera probablement déjà entièrement chargé.

+0

a déclaré la variable dans une fonction exécutée sur onload ... fixe ... merci à tous! – bogdan

1

Votre page n'est peut-être pas entièrement chargée lorsque vous appelez getElementById.

Assurez-vous de créer la variable globale x à la fin du chargement de la page. La plupart des bibliothèques ont un moyen de gérer cela, jQuery a par exemple la fonction "ready". Si vous ne voulez pas utiliser de bibliothèques, vous pouvez toujours créer la variable lorsque l'élément body appelle l'événement onload.

style jQuery:

$(function(){ 
    // create X here 
}) 

corps style onload:

<body onload="aFunctionThatCreatesYourVariable()"> 
Questions connexes