在整个程序期间更改变量的值:JavaScript

时间:2013-01-13 06:03:18

标签: javascript jquery html web-applications web

我有几个.js文件,每个文件包含不同的功能和几个显示网站不同部分的HTML文件。我在main.js中声明了一个名为var lang =“ENG”的变量。但是,如果用户未选择更改网站内容的语言,则这是默认语言。如果我要点击index.html中的按钮:

<button id="french" onclick="changeLang('French')">French</button>

在当前浏览期的剩余时间内,它应该将var lang的语言永久更改为“FRE”。我已经尝试使用innerHTML,一个点击监听器,一个返回新值的函数(即var lang = setLanguage(inp),但似乎没有任何工作。有人请给我一个建议吗?我正在处理一个大的现有代码数据库所以我想在这种情况下工作的东西(目前不是在网站上实现“语言”设施的更好方法),虽然这肯定会是我长期工作的改进。谢谢!

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望即使在加载新文档时信息仍然存在。就每个单独的文档而言,没有“程序的持续时间”,但是您可以通过写入和读取sessionStorage对象来跨会话存储数据。

集:

sessionStorage.setItem('language', 'FRE');

得到:

var language = sessionStorage.getItem('language');

您也可以使用Cookie,如果您需要支持旧的浏览器,则可能需要使用Cookie。

编辑: 在重新阅读您的问题时,我意识到听起来您根本无法设置语言变量,更不用说整个浏览器会话了。如果是这种情况,我怀疑你遇到了可变范围问题。也许告诉我们changeLang功能?例如,如果在全局范围内声明了lang,则设置函数不应使用'var',否则它将仅在其本地范围内创建一个具有该名称的新变量。

var lang = 'ENG';
function changeLang(newLang) { lang = newlang };

答案 1 :(得分:1)

听起来你的问题是变量范围。这是一个关于JavaScript变量范围的复杂问题:JavaScript Scoping

编辑:如果这不是范围问题,请查看Semicolon的答案。

基本前提是您的lang变量需要是一个全局变量,然后您应该能够在代码中的任何其他位置修改它。

看起来应该是这样的:

在您的主文件中,在任何函数外部,使用var关键字声明您的变量,如下所示:var lang = 'ENG';

然后,当您想要更改它时(很可能是在函数内部)使用var关键字设置变量而不是,如下所示:

function changeLanguage(l) {
    lang = l;
}

然后,您应该可以在其他任何地方使用lang并获取最新值。