我有两个页面,两个页面都有相似的结构 - 带有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()调用来删除'window'。比特,例如;
console.log(assetsTable1);
和
console.log(vocRevTableRef);
事情回归理智。在这两种情况下,Firebug都会显示对象
Object[table#vocRevTableRef.tableWrapDataClass]
和
Object[table#assetsTable1.tableWrapDataClass]
窗口对象正在发生一些事情。当然这真是令人抓狂。我可能会错过什么?我应该寻找什么来调试这个? (HTML似乎没有格式错误。)我只是试图将有问题的对象引用传递给一个函数,该函数将行从thePassedReference.tbodies中拉出并对它们求和,但当然它因为神秘而失败了。传递未定义的值。 HALP!感谢。
答案 0 :(得分:0)
这两个变量都不是全局的,第一个例子是有效的,因为浏览器允许通过它们的ID a'window.IdOfAnElement
访问元素(示例1中元素的id等于变量名)。
注意:console.log
显示DOMNode的标记,当它显示变量的内容时,结果将是jQuery对象,而不是DOMNode
答案 1 :(得分:0)
var vocRevTableRef
不是全局变量 - 删除'var'
,它将成为一个变量。当然,你的其他应有的全局变量也是如此。第二个示例中的Console.log不起作用,因为隐藏的元素$("#vocationalRevenueTableSub").hide();
变得无法访问。
答案 2 :(得分:0)
在第一页上,您可以访问window.assetsTable1
,因为您的元素为id="assetsTable1"
。这不是因为您的变量(声明为var,因此不是全局)
在第二页上,没有id="vocRevTableRef"
的元素,也没有名称为vocRevTableRef
的全局变量。因此它给出了undefined
。