繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM