我的JavaScript代码串是在一个名为helpers.js外部文件。 里面调用此JavaScript代码,我发现自己需要知道,如果从helpers.js某个函数被调用的HTML。
我试图通过定义来创建一个全局变量:
var myFunctionTag = true;
在这两个在我的HTML代码和helpers.js全球范围内。
继承人什么我的HTML代码如下所示:
<html>
...
<script type='text/javascript' src='js/helpers.js'></script>
...
<script>
var myFunctionTag = false;
...
//I try to use myFunctionTag here but it is always false, even though it has been se t to 'true' in helpers.js
</script>
正是我试图做甚至是可行的?
您需要在包括helpers.js文件之前声明变量。 上述包括helpers.js和定义它有简单的创建一个脚本标签。
<script type='text/javascript' >
var myFunctionTag = false;
</script>
<script type='text/javascript' src='js/helpers.js'></script>
...
<script type='text/javascript' >
// rest of your code, which may depend on helpers.js
</script>
变量可以在声明.js
文件和HTML文件只引用。 我的版本helpers.js
:
var myFunctionWasCalled = false;
function doFoo()
{
if (!myFunctionWasCalled) {
alert("doFoo called for the very first time!");
myFunctionWasCalled = true;
}
else {
alert("doFoo called again");
}
}
而一个页面来测试它:
<html>
<head>
<title>Test Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript" src="helpers.js"></script>
</head>
<body>
<p>myFunctionWasCalled is
<script type="text/javascript">document.write(myFunctionWasCalled);</script>
</p>
<script type="text/javascript">doFoo();</script>
<p>Some stuff in between</p>
<script type="text/javascript">doFoo();</script>
<p>myFunctionWasCalled is
<script type="text/javascript">document.write(myFunctionWasCalled);</script>
</p>
</body>
</html>
你会看到测试alert()
会显示两个不同的东西,并写入到页面的值会有所不同,第二次。
OK,伙计们,这是我的小测试过。 我有一个类似的问题,所以我决定测试一下3种情况:
- 一个HTML文件,一个外部JS文件......它在所有的工作 - 可以通过功能一个全局变量沟通?
- 两个HTML文件,一个外部JS文件,一个浏览器,两个标签:他们将通过全局变量干扰?
- 一个HTML文件,通过浏览器2打开,它会工作,他们会干预?
所有结果均符合预期。
- 有用。 函数f1()和f2()通过全局变量(VAR是在外部JS文件,而不是在HTML文件)进行通信。
- 他们不干扰。 显然,JS文件的副本不同已经进行了各个浏览器选项卡,每个HTML页面。
- 所有独立工作,符合市场预期。
相反,浏览教程,我发现它更容易尝试一下,所以我做到了。 我的结论:只要你包括在HTML页面中一个外部JS文件,外部JS的内容被“复制/粘贴”到你的HTML网页页面之前被渲染。 或到PHP页面,如果你会的。 如果我错了,这里请大家指正。 感谢名单。
我的示例文件如下:
外部JS:
var global = 0;
function f1()
{
alert('fired: f1');
global = 1;
alert('global changed to 1');
}
function f2()
{
alert('fired f2');
alert('value of global: '+global);
}
HTML 1:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="external.js"></script>
<title>External JS Globals - index.php</title>
</head>
<body>
<button type="button" id="button1" onclick="f1();"> fire f1 </button>
<br />
<button type="button" id="button2" onclick="f2();"> fire f2 </button>
<br />
</body>
</html>
HTML 2
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="external.js"></script>
<title>External JS Globals - index2.php</title>
</head>
<body>
<button type="button" id="button1" onclick="f1();"> fire f1 </button>
<br />
<button type="button" id="button2" onclick="f2();"> fire f2 </button>
<br />
</body>
</html>
喜从一个js文件的值传递给另一个js文件,我们可以使用本地存储的概念
<body>
<script src="two.js"></script>
<script src="three.js"></script>
<button onclick="myFunction()">Click me</button>
<p id="demo"></p>
</body>
Two.js文件
function myFunction() {
var test =localStorage.name;
alert(test);
}
three.js所档案
localStorage.name = 1;
我想你应该使用“本地存储”,而不是全局变量。
如果您关注的是“本地存储”可能无法在很老的浏览器所支持,可以考虑使用现有的插件,它检查的“本地存储”的可用性,并使用其他的方法,如果它是不可用的。
我用http://www.jstorage.info/ ,我很高兴与它至今。
你可以做一个JSON对象,如:
globalVariable={example_attribute:"SomeValue"};
在fileA.js
而从fileB.js访问它,如: globalVariable.example_attribute
// JavaScript文件1
localStorage.setItem('Data',10);
// JavaScript文件2
var number=localStorage.getItem('Data');
不要忘了你的JS文件的HTML链接:)