javascript:不能在函数中使用全局变量来导航dom

时间:2010-10-10 12:26:55

标签: javascript dom variables scope

这里的初学者...... 我错过了什么?

我定义一个全局变量,它是对html元素的引用:

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

然后,在函数内部尝试引用该变量来导航dom:

        x.innerHTML="dsfgfdgdf";

......不起作用;如果我在它工作的函数内定义变量,但我不知道它是如何作为范围问题...在函数内部使用全局变量工作正常如果我不在dom上下文中使用它们(object.property)< / p>

感谢

4 个答案:

答案 0 :(得分:2)

在加载DOM之前是否执行了getElementById? (你应该等待domready或onload)

是否有可能在某些其他功能中覆盖该值?

答案 1 :(得分:2)

这不是范围问题。

最可能的原因是在创建变量时元素尚不存在。您必须在您要访问的元素之后放置创建变量的脚本元素,因为代码将在页面加载时运行。

另一种方法是全局声明变量,并从页面加载后运行的onload事件中设置它:

<script>

var x;

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

</script>

<body onload="init();">

答案 2 :(得分:1)

我认为问题可能是,如果您全局声明该变量,那么在评估该行时,DOM不会被完全加载,因此该元素不可访问。

当你在函数中声明它时,只有当你调用那个函数时才会创建变量,而DOM很可能已经完全加载了。

答案 3 :(得分:1)

当您调用getElementById时,可能您的页面未完全加载。

确保在页面加载完成后创建全局变量x。大多数库都有办法处理它,例如jQuery具有“就绪”功能。如果您不想使用任何库,则可以在body-element调用onload-event时始终创建变量。

的jQuery式:

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

body onload style:

<body onload="aFunctionThatCreatesYourVariable()">