有没有办法修改函数中的全局变量然后在另一个页面中使用它?让我更好地解释一下我的情况:我有两个HTML文件," Index.html"和" character.html"。在Index中,我已经关联了这个JS代码:
var pcharacter = "initialValue";
document.getElementById("barbarianClass").onclick = function(event){
event.preventDefault();
pcharacter = "barbarian"; // the important line here...
location.href = "pages/character.html";
}
元素" barbarianClass"是一个链接,这就是我为preventDefault()
阻止默认行为的原因,直到我为pcharacter
var指定了值。现在,我有了character.html,它附带了以下一个单独的JS代码:
alert(pcharacter);
在character.html中,我有两个JS文件相关,应该如何完成:
<script type="text/javascript" src="indexCode.js"></script>
<script type="text/javascript" src="charsCode.js"></script>
问题在于,当我点击链接&#34; barbarianClass&#34;并且我的character.html页面显示,警报中显示的变量字符是&#34; initialValue&#34;,即使我说它具有值&#34;野蛮人&#34;在打开页面之前附加到链接的事件内部。当然,我有这个变量的计划,但对于这个问题,警报更容易。有人可以告诉我为什么保留initialValue?在JS中是否有任何模糊的规则说当你加载一个JS文档时,全局变量不能再被改变或类似的东西?我没有任何意义......
答案 0 :(得分:1)
您可以在Cookie中保存数据
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return "";
}
http://www.w3schools.com/js/js_cookies.asp
您的代码将
/*save data*/
document.getElementById("barbarianClass").onclick = function(event){
event.preventDefault();
setCookie('pcharacter', 'barbarian', 1)
location.href = "pages/character.html";
}
/*get data*/
alert(getCookie('pcharacter'));
答案 1 :(得分:1)
你想要做的事情根本就不可能只使用变量,因为你的评论中有人突出显示的原因
让我们假设这是可能的 - 您是否希望通过其他页面上的javascript变量访问您的银行详细信息页面?
您应该使用Cookie(客户端)或会话(服务器端)来完成此任务。这是你在javascript中设置cookie的方式:
document.cookie = "pcharacter=barbarian"
然后您可以通过这个简单的函数在所有其他页面中访问此cookie:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return
c.substring(name.length,c.length);
}
return "";
}
console.log(getCookie("pcharacter"));
您还可以设置Cookie的到期时间。
答案 2 :(得分:1)
回答你的问题 - 答案是肯定和否定。如果你要做的是直接加载一个新的网页然后没有 - 你的全局变量将像棉花糖一样在一个carny show中消失。
BUT!相反,如果使用jQuery的getScript()函数,则可以加载新的网页并保留全局变量。您所要做的就是将传入的网页转换为十六进制,这样所有不同的字母(如小于号,单引号和双引号)都不会破坏,一旦拥有它就会转换,然后替换您的网页页面或插入您的网页/部分。
要将其转换为十六进制,您只需要PHP中的bin2hex()函数。要在Javascript中取消某些内容,您可以在GitHub上获取我的toHex()和fromHex()函数。
另外,您可能想要考虑将所有内容以十六进制形式发送回服务器,因此脚本小子更难以给自己+1000武器。只是一个想法。它不会减慢它们的速度 - 但每一点点都有帮助。 : - )
答案 3 :(得分:0)
您可以使用localStorage将数据从一个文件传递到另一个文件。基本语法是:
if (typeof(Storage) !== "undefined") {
// Code for localStorage/sessionStorage.
} else {
// Sorry! No Web Storage support..
}
设定值:
localStorage.setItem('myObj', 'My Object');
获得价值:
localStorage.getItem('myObj');
如果不支持localStorage,您可以随时回退到其中一个cookie或URL重写。
否则你也可以使用window.name