我遇到全局变量问题。
考虑到我有以下文件:init.html,main.html,init.js,main.js和help.js:
其中,init.html:
<HTML>
<HEAD>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js"></script>
<script type="text/javascript" charset="UTF-8" src="init.js" ></script>
<script type="text/javascript" charset="UTF-8" src="main.js" ></script>
<script type="text/javascript" charset="UTF-8" src="help.js" ></script>
</HEAD>
<BODY>
<script>
$(document).ready(function() {
test();
});
</script>
</BODY>
</HTML>
在init.js中:
function test(){
alert(window.glob);
}
在main.html中:
<HTML>
<HEAD>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js"> </script>
<script type='text/javascript' >
top.glob = "global variable";
</script>
<script type="text/javascript" charset="UTF-8" src="help.js" ></script>
<script type="text/javascript" charset="UTF-8" src="main.js" ></script>
</HEAD>
<BODY>
<div id="divtest"></div>
<form>
<input type="button" value="button" onClick="callTest()" />
</form>
</BODY>
</HTML>
main.js:
function change(p){
window.glob = p;
$('#divtest').html("<iframe id='IFRAMEtest' width='720' height='400' frameborder='0' src='init.html'></iframe>");
}
在help.js中:
function callTest(){
change('param');
}
当我点击按钮时,显示“全局变量”,但我需要显示“param”。
简而言之,我需要一个.js文件读取另一个js文件中的全局变量,其中此变量被送入由用户事件调用的函数中。
感谢。
编辑 - 导入文件前初始化的全局变量。 js和使用顶部。适用于IE和Firefox,但Chrome显示“未定义”
答案 0 :(得分:19)
看看这里: Global variables in Javascript across multiple files 最重要的是,您可能必须声明全局变量 在实际文件之前,所以在包含到help.js之前尝试插入它。
所以试着尝试一下。
<script type='text/javascript' >
window.glob = "global variable";
</script>
所以你的代码应该是:
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js" ></script>
<script type='text/javascript' >
window.glob = "global variable";
</script>
<script type="text/javascript" charset="UTF-8" src="help.js" ></script>
<script type="text/javascript" charset="UTF-8" src="main.js" ></script>
</head>
尝试一下,看看它是否有效。 另外,从main.js中删除你的全局变量声明。
答案 1 :(得分:7)
实际上没有跨越窗口(框架)的全局上下文。 &#34;系列中的所有帧&#34;可以访问名为&#34; top&#34;的变量。这是指最顶层的窗口,所以你可以使用它。
top.glob = "global variable";
并在您的iframe代码中:
function test(){
alert(top.glob);
}
编辑 - Here is a a slightly simplified version of your code,对我来说效果很好。
答案 2 :(得分:1)
当你在一个框架内并希望从父窗口获取一个窗口变量时,你必须引用它。
使用top
或window.top
。