使用全局变量外文档准备好javascript?

时间:2013-02-09 07:27:51

标签: javascript

通过这个站点我已经看到了一些关于如何在文档就绪中更新全局变量的建议,然后在文档准备就绪之外使用它。我已经尝试了很多这些组合,但这些似乎都不起作用。有帮助吗?我错过了什么?

test = 0 ;

var test = 0;

test;

var test;

或文件外的声明都没有准备好

然后

    $(document).ready(function(){
  test = 4;
});

然后......

alert(test);

输出:0,或未定义。为什么哦,为什么你不输出4我想要你!我知道,我希望我可以使用正常的功能,这很容易,但我不能。我需要使用文档准备好让一些json / jplot材料起作用。

1 个答案:

答案 0 :(得分:2)

test = 4;将创建一个全局变量并将其设置为4.它等同于更明确的window.test = 4

在创建全局变量之前,它的值将以未定义的形式返回。

您需要确保在文档就绪处理程序运行后调用alert(test)。这意味着您需要在事件处理程序中调用它或从文档内部调用函数。

如果您只是在文档就绪处理程序下面调用alert(test),它将在页面加载时立即执行 - 此时它的值将为undefined。只有文档准备好后,test才会设置为4.

另请注意,名为test的任何局部变量都将影响全局变量,即将使用局部变量的值而不是全局变量的值。您可以使用window.test

来避免这种情况

您可以做两件事:

  • 将ID添加到表格中的字段,然后在文档就绪处理程序
  • 中设置其内容
  • 在页面的其余部分完成加载并且已设置测试后插入表格

我建议采用第一种方法:

$(document).ready(function(){
  test = 4;
  document.getElementById("test-value").innerHTML = test
});

使用此HTML代码:

<table>
    <!-- ...whatever else you have -->
    <td id="test-value"></td>
    <!-- ... -->
</table>

如果你想使用<script>document.write(test)</script>,你需要通过在文档就绪处理程序中将innerHTML(见上文)设置为“...”来插入表的html代码。

你可以这样做,但它会比这需要更痛苦。如果你只是将innerHTML设置为类似“document.write(test)”的东西,浏览器会认为包含文档就绪处理程序的脚本标记已经关闭。

相反,我建议您使用模板引擎,例如_.template in underscore.js。然后,您基本上将HTML放在脚本标记内,并且只在您在document.ready中时显示它。此时,您将能够指定将在模板中替换的变量。