Javascript范围问题或实例化问题?

时间:2012-07-31 21:18:25

标签: javascript arrays internet-explorer scope

我有一个网页,可以根据文本输入字段中的用户'keyup'事件动态进行一些计算。这是一个动态构建的相当大的页面,因此我必须保留一个Hash / Array值,我可以从页面中的其他位置引用这些值。

所以在页面顶部我这样做 -

var itemBalanceHash = new Array();
var itemID_2_POIDHash = new Array();
var currentPODocumentID;
var warningArray = new Array();

然后我继续定义一些使用我刚刚定义的变量的函数。 然而,直到我完成这些函数的定义之后,才开始使用这些变量(即填充内容。)

<script type="text/javascript">                                
itemBalanceHash["${topitem.itemIdentifier}"]="${topitem.itemOutstandingEncumberedAmount}";
itemID_2_POIDHash["${topitem.itemIdentifier}"] = currentPODocumentID;
</script>

此脚本块在构建时出现在我的页面中间。实际上,它会被多次调用,具体取决于我需要填充多少行(来自数据库的查询结果集)。

无论如何 - 这在Firefox中很有用。但是,它在IE8,Chrome或Safari中不起作用。 我没有在旧版本的IE中测试过这个;但我认为它也不会在那里工作。

Internet Explorer调试器给出的错误消息是

“itemBalanceHash未定义”

所以,我的问题: 这是一个范围问题吗? Firefox似乎在某处纠正了我的错误,但在哪里?

如有必要,我可以提供更多代码。谢谢你的帮助!
非常感谢!

1 个答案:

答案 0 :(得分:0)

问题出在iframe上! Firefox为我执行JSP页面中的所有JS代码。 IE,Chrome和Safari需要将事件监听器附加到页面上,该事件监听器将触发加载事件,然后执行我的JS代码(此对象的实例化应该发生)。

非常有趣。我期待微软这样的事情,但我很惊讶Google和Safari的表现方式类似。 FF是我的默认浏览器的另一个原因。

感谢大家的帮助/回复。

干杯!