Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JQuery中存储全局变量?_Javascript_Jquery_Html_Css_Cookies - Fatal编程技术网

Javascript 如何在JQuery中存储全局变量?

Javascript 如何在JQuery中存储全局变量?,javascript,jquery,html,css,cookies,Javascript,Jquery,Html,Css,Cookies,首先,我想说的是,我有一个网站,我想在不重新加载页面的情况下更改语言。这就是为什么我插入了EN和DE的按钮 <button lang="de" class="btn btn-primary btn-sm language" >DE</button> <button lang="en" class="btn btn-primary btn-sm language" >EN</button> 这就是我的JQuery脚本: if ($("html").

首先,我想说的是,我有一个网站,我想在不重新加载页面的情况下更改语言。这就是为什么我插入了EN和DE的按钮

<button lang="de" class="btn btn-primary btn-sm language" >DE</button>
<button lang="en" class="btn btn-primary btn-sm language" >EN</button>
这就是我的JQuery脚本:

if ($("html").hasClass('de')) {
  $('html').addClass('de');
}
else{
     $('html').addClass('en');  
}

$('.language').click(function(){
($('html').toggleClass('de en'));


    });
最后是我的html标签:

<html class="">

我的问题是,如果我在一个页面上更改语言,如果我单击指向新页面的链接,它会自动更改回原来的语言。我知道我的jqueryif函数有问题。但我真的不知道如何解决这个问题。
也许用JQuery cookies

是-每次页面加载都会产生一个新的JavaScript作用域。如果需要在页面之间保持任何状态,则需要使用cookie或在页面之间的URL上添加一些内容。(即使使用服务器端组件,通常也需要客户端标识符来保留会话ID,以便服务器重新关联。)


也可能有兴趣。

在客户端执行此操作的简单方法是使用查询字符串。您可以将查询字符串附加到url的末尾,如下所示:

 html.en :lang(de) {
  display: none;
}
html.de :lang(en) {
  display: none;
}
?lang=en
然后在javascript中,您可以解析出查询字符串并相应地进行处理。虽然有很好的库可以解析查询字符串(),但下面是一个非常简单的JS片段,它将获取查询字符串。但这仅在有一个查询字符串时有效。如果将来打算使用更多的查询字符串,则需要实现更好的功能

var language = location.search.replace(/^.*?\=/, '');

为了保持对当前语言环境的跟踪,最好的做法是在url中设置它,这种方法允许用户在需要时切换lang

如果你不能保持Lon在URL上,你可以考虑使用WebStorage… 试着这样做:

 html.en :lang(de) {
  display: none;
}
html.de :lang(en) {
  display: none;
}
?lang=en
var i18n服务=(函数($,存储){
var STORAGE_KEY='MY_SITE_CURRENTLOCALE';
函数i18n服务(){
$(文档).ready(函数(){
this.setCurrent(this.current);
});
}
I18nService.prototype.available=['en','de']
I18nService.prototype.current=(函数(){
var res=此。可用[0];
var previous=this.getStored();
如果(先前){
res=先前的;
}
返回res;
})();
I18nService.prototype.getStored=function(){
返回storage.getItem(存储密钥);
};
I18nService.prototype.store=函数(){
storage.setItem(storage_KEY,this.current);
归还这个;
};
I18nService.prototype.setCurrent=函数(newVal){
this.current=newVal;
返回此.store().updateClasses();
};
I18nService.prototype.getCurrent=函数(){
返回此.current;
};
I18nService.prototype.updateClasses=函数(){
$('html').removeClass(this.available.join(“”)).addClass(this.current);
归还这个;
};
返回新的i18n服务();
})(jQuery、window.localStorage.bind(window)/*或sessionStorage,取决于您需要什么*/)

您可以禁用按钮以防止重新加载页面,因为您不需要重新加载此页面

$('.language').click(function(e){
($('html').toggleClass('de en'));
     e.preventDefault();  
    });

cookie或localStorage是需要的谢谢你的回答,但我不知道如何集成它,或者我必须更改一些东西吗?你必须把它放在你的应用程序中,我认为没有bug。。。当您想更改语言环境时,需要调用I18nService.setCurrent('de');这是一个单音,自动加载,类。。。我希望这就是你所需要的!!让我了解一下代码,它工作正常吗@Jesse“双感叹号”是什么意思?“用户需要时切换lang!!”