全局变量无法通过窗口对象访问 - 间歇性(?!



我有两个页面,都有类似的结构-带有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.tbodies中提取行并求和,但在第2页上它当然失败了,因为它神秘地传递了一个未定义的值。停下!谢谢

这两个变量都不是全局的,第一个例子之所以有效,是因为浏览器允许通过它们的ID‘lawindow.IdOfAnElement访问元素(例子1中元素的ID等于变量名)。

注意:console.log显示DOMNode的标记,当它显示变量的内容时,结果将是jQuery对象,而不是DOMNode

var vocRevTableRef不是全局变量-删除'var',它将变成一个。当然,其他应该是全局变量的情况也是如此。第二个例子中的Console.log不起作用,因为隐藏元素$("#vocationalRevenueTableSub").hide();变得不可访问。

在第一个页面上,您可以访问window.assetsTable1,因为您有一个带有id="assetsTable1"的元素。这并不是因为你的变量(它被声明为var,所以不是全局的)

在第二页上,没有id="vocRevTableRef"的元素,也没有名为vocRevTableRef的全局变量。因此给出CCD_ 10。

相关内容

  • 没有找到相关文章

最新更新