无法访问全局变量(Javascript)

var hours = document.getElementById("hrs").value; // Global variables declared
var mins = document.getElementById("min").value; 
var seconds = document.getElementById("sec").value; 

function random()
{
    alert(hours);
    alert(mins);
    alert(seconds);
}

输出结果在所有3种情况下都undefined


这个特定的代码可能在HTML文件的主体内,并且在创建特定的HTML元素之前执行此代码。 所以, undefined的值被分配给这些值。

所以,你可能想要在函数本身中移动赋值部分。

var hours, mins, seconds;

function random()
{
    hours = document.getElementById("hrs").value;
    mins = document.getElementById("min").value; 
    seconds = document.getElementById("sec").value; 

    alert(hours);
    alert(mins);
    alert(seconds);
}

注1:通常情况下,如果你不使用像jQuery这样的库,像这样的代码被放入onload 。 这就是MDN必须说的, when onload is triggered

加载事件在文档加载过程结束时触发。 此时,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。

因此,如果您从HTML元素获取值,则可能需要确保仅在HTML文档加载完成后才从中获取值。

注2:除此之外,您可能需要检查是否确实正确设置了hrsminsec的HTML元素的idnameid属性实际上用于不同的目的。


我最近在服务器端脚本中遇到了类似的问题。

这是因为我使用var重新声明了函数内部的变量。 摆脱var修复了这个问题。


试试这个链接,它可能会有帮助:

如果将以下内容作为JavaScript程序执行,您是否知道会提示哪些值?

var foo = 1;
function bar() {
    if (!foo) {
        var foo = 10;
    }
    alert(foo);
}
bar();

如果让你惊讶的是答案是“10”,那么这一个可能会真的让你陷入循环:

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);

http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

链接地址: http://www.djcxy.com/p/88043.html

上一篇: Can't access global variables (Javascript)

下一篇: Name vs Id attribute in HTML