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

问题描述 投票:0回答:5

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

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

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

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

        x.innerHTML="dsfgfdgdf";

...不起作用;如果我在函数内部定义变量,它可以工作,但我不明白这是一个作用域问题...如果我不在 dom 上下文中使用全局变量(object.property),则在函数内部使用全局变量可以正常工作

谢谢

javascript dom variables scope
5个回答
2
投票

这不是范围问题。

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

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

<script>

var x;

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

</script>

<body onload="init();">

2
投票

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

是否有可能覆盖其他函数中的值?


1
投票

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

当您在函数中声明它时,只有在调用该函数时才会创建该变量,此时 DOM 很可能已经完全加载。


1
投票

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

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

jQuery 风格:

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

正文加载样式:

<body onload="aFunctionThatCreatesYourVariable()">

0
投票

其实我不久前就遇到过这个问题,并想出了一个简单的答案。 您需要做的就是将包含在页面底部的整个 javascript 移动到标签上方。它的作用是为 DOM 提供加载时间。

© www.soinside.com 2019 - 2024. All rights reserved.