[英]Global variable can't be accessed through window object - intermittently(?!)
我有两个页面,两个页面的结构相似-带有ID标签的表格如下所示
<TABLE id="assetsTable1" width="100%" class="tableWrapDataClass"> ...
和
<table id="vocationalRevenueTable" class="revenue" width="100%"> ...
两个页面都使用几乎相同的javascript代码。 但是,全局变量的值在第2页上的行为有所不同!
这是第1页的摘录;
<script type="text/javascript" src="templates/footer.js"></script>
<script type="text/javascript" src="script/jquery-1.8.1.js"></script>
<script type="text/javascript" src="script/scripts.js"></script>
<script>
$(document).ready(function() {
var assetsTable1 = $('#assetsTable1');
var assetsTable2 = $('#assetsTable2');
var liabilitiesTable1 = $('#liabilitiesTable1');
var liabilitiesTable2 = $('#liabilitiesTable2');
var shareholderTable = $('#shareholderTable');
// note not all subtotals are shown
$("#A2Row1").hide();
$("#A2Row2").hide();
$("#L2Row1").hide();
$("#L2Row2").hide();
console.log(window.assetsTable1);
});
// etc
从第2页开始
<script type="text/javascript" src="templates/footer.js"></script>
<script type="text/javascript" src="script/jquery-1.8.1.js"></script>
<script type="text/javascript" src="script/scripts.js"></script>
<script>
$(document).ready(function() {
var vocRevTableRef = $('#vocationalRevenueTable');
var nonVocRevTableRef = $('#nonVocationalRevenueTable');
var otherRevTableRef = $('#otherRevenueTable');
// note not all subtotals are shown initially
$("#vocationalRevenueTableSub").hide();
$("#nonVocationalRevenueTableSub").hide();
$("#otherRevenueTableSub").hide();
console.log(window.vocRevTableRef);
});
// etc
在Firebug中,第1页上的console.log()调用非常合理
<table id="assetsTable1" class="tableWrapDataClass" width="100%">
但是,在第2页上,它返回
undefined
但是,如果我修改两个页面上的console.log()调用,以删除“窗口”。 一点
console.log(assetsTable1);
和
console.log(vocRevTableRef);
事情恢复了理智。 在两种情况下,Firebug都会显示对象
Object[table#vocRevTableRef.tableWrapDataClass]
和
Object[table#assetsTable1.tableWrapDataClass]
窗口对象正在发生某些事情。 当然,这绝对令人发疯。 我可能会丢失什么? 我应该寻找什么来调试它? (HTML似乎没有格式错误。)我只是试图将有问题的对象引用传递到将行从PassedReference.tbody中拉出并求和的函数,但是当然在第2页失败,因为它神秘传递一个未定义的值。 HALP! 谢谢。
两个变量不是全局的,第一个例子中的作品,因为浏览器允许通过它们的ID网HRS欧洲访问元件window.IdOfAnElement
(实施例1中的元素的id为等于变量名称)。
注意: console.log
显示DOMNode的标记,当它显示变量的内容时,结果将是jQuery对象,而不是DOMNode
var vocRevTableRef
不是全局变量-删除'var'
,它将变为1。 当然,其他假定为全局变量的情况也是如此。 第二个示例中的Console.log不起作用,因为隐藏元素$("#vocationalRevenueTableSub").hide();
变得无法访问。
在第一页上,您可以访问window.assetsTable1
因为您有一个id="assetsTable1"
的元素。这不是因为您的变量(声明为var,所以不是全局变量)
在第二页上,没有id="vocRevTableRef"
元素,也没有名为vocRevTableRef
全局变量。 因此它给出了undefined
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.