2012-09-15 129 views
1

我花了3天试图找出这个简单的问题。我只想让整个网站记住winversion全局变量值,并且能够从一个函数内改变它。 (是的,我知道全局变量比darthwader更邪恶,但请这是我生命中唯一的好事)我如何从一个函数内改变一个全局变量?

我有一个HTML文件,并且当用户点击里面,我加载不同的页面从我的域名)到。

这是我的index.html(它有周围的几个div的,但我敢肯定,这无关紧要,因为其他一切作品,而JavaScript是只为这)

<script type="text/javascript" src='script.js'></script> 
---------- (some inner body html , not important)---------------- 

<iframe id="myiframe" src="mainproblems.html" > 

默认的iFrame页有这样的html代码

<a href="#" onclick="setwinver('xp')";>I have Windows XP </a> 
    <a href="#" onclick="setwinver('win7')";> have Windows 7/Vista </a> 

我的script.js是这个

// This is supposed to be my global variable to hold windows version value 
var winversion ; 

    // This function (I officially hate it now) is supposed to change 
    // winversion variable based on what user clicked on the iFrame 
    function setwinver(ver) 

{ 
     //so now winversion should either have xp or win7 assigned 
     winversion=ver; 
} 

但稍后,在下一个时,当我尝试在相同的JavaScript文件中读取winversion时,它说未定义。这个navigatenow()函数在用户选择第1页的windows版本后触发,并在下一个html页面点击链接启动msconfig描述页面(在中加载)。

function navigatenow() 
{ 

     if (winversion == "xp") 
    { 
     window.location.href=("msconfigxp.html"); 
    } 
    else 
    { 
     window.location.href=("msconfig7.html"); 
    } 
} 

我曾尝试:

  • 使用/不使用var

  • 使用/不使用单引号,双引号(尽管我知道没有区别)。

  • 读了十几篇关于吊装的文章。

  • 使用persistjs几个小时。

  • 冥想和祈祷!

没有工作。该死的winversion变量仍然没有定义为我存在的目的。

所有我想要的是为我的html文件记住哪个windows版本用户选择(不,我不能检测Windows版本编程,我的目的是要求用户的版本是不同的)。

任何帮助将不胜感激修复,如果不是,请建议一个合适的悬崖,我可以跳下。

+0

您是否检查控制台是否有错误?看起来你试图在框架的上下文中调用setwinver(),而函数是在父窗口的上下文中定义的。 –

+0

thx。但只有1个JavaScript文件和winversion和setwinver()函数都在同一个文件中:( – LePrinceDeDhump

+0

*“请建议一个合适的悬崖,我可以跳下来。”)* lol! – Thousand

回答

4

iframe中的页面是一个单独的窗口,它不会继承索引页的范围。您需要指定要转到父窗口,并使用有脚本:访问变量

window.parent.setwinver('xp'); 

而且是相同的:

if (window.parent.winversion == "xp") 

这里是一个工作示例:http://jsfiddle.net/ga62A/

索引页面加载这个iframe:http://jsfiddle.net/cMDvc/1/
然后你继续这个igrame:http://jsfiddle.net/9qjaX/

+0

merci先生,但我认为JavaScript的神听到你试图解决我的问题,并做了一些不让它工作。仍然说,当我使用这种方法UNDEFINED ...仍然!!! – LePrinceDeDhump

+0

@LePrinceDeDhump:我做了一个例子。 – Guffa

1

LePrince,当您更换页面时,JS会删除所有更改内存的所有内存。 JavaScript是读入的页面,但你不能回JS文件,从最终用户的浏览器,因为这将只是会问到有你的生活,你的网站,你所有的钱被盗。

您对读取的原始代码所做的所有更改都存储在内存中。只要页面持续,该记忆只会持续。 之后,它再次重新加载页面,与往常一样。

如果您需要它做的比这更多,您可以从document.cookie开始。 它意味着存储非常小的信息,除非您编写获取cookie和设置cookie的工具,否则使用起来并不好玩。

接下来是localStorage,这是更有用和更新(但旧的IE不支持它,所以在Windows 7的人不能使用它)。但是这仍然只对一个用户的数据有好处,并且不会为任何其他用户改变任何内容。

如果您希望能够添加......说,评论或星级评分,其他人可以看到帖子和评分以及上传的图片,那么您需要查看服务器端编程。 Ruby(/ Rails),PHP,Node.js等等。

+0

Aaaaaaaaah .....所以PHP或饼干是金答案....谢谢很多!!!!!!!!!现在我可以atleast坚持两个手指到winversion变量,并与饼干和PHP交朋友....你的父亲是宝石并被制成kn当我的人从木星接管世界! – LePrinceDeDhump

+0

thxxx.x ...我在5分钟内根据您的cookie建议修复了它......现在开始工作。我只是使用cookie来存储数据YAAAAAAAY – LePrinceDeDhump

相关问题