1

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

test = 0 ;

或者

var test = 0;

或者

test;

或者

var test;

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

然后

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

然后后来...

alert(test);

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

4

1 回答 1

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)”之类的内容,浏览器将认为包含文档就绪处理程序的脚本标记已关闭。

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

于 2013-02-09T07:34:01.383 回答