【问题标题】:Can't access global variables (Javascript)无法访问全局变量(Javascript)
【发布时间】:2014-01-17 01:59:34
【问题描述】:
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

【问题讨论】:

  • 您是否尝试在函数 random 之外提醒(小时)?如果是,结果如何?
  • 我们可以使用 this.mins 还是 this.hours?因为我在backbone.js中这样使用我不知道我们是否也可以在javascript中这样使用?请检查
  • 看来一切正常!您能否确保正确设置了hrsminsec HTML 元素?应该是这样的<input type='text' id='hrs' />
  • HTML 部分我检查了好几次,看起来都很好。

标签: javascript


【解决方案1】:

此特定代码可能位于 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 元素的idname and id attributes are actually used for different purposes.

【讨论】:

  • 谢谢!!我能够修复它,你正在写关于那个 onload 事件。
【解决方案2】:

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

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

【讨论】:

  • 我的问题就是这种情况。谢谢。
【解决方案3】:

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

你知道如果以下作为 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

【讨论】:

    【解决方案4】:

    很容易实现您的示例,如下所示:

    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 + mins + seconds);
    }
    <input type="text" id="hrs" value="9" />
    <input type="text" id="min" value=":30" /> 
    <input type="text" id="sec" value=":25" />
    
    <input type="button" id="submit" value="GetDetails" onclick="random();">

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2020-01-15
      相关资源
      最近更新 更多