我有一个多语言登录网站,我想使用jQuery将登录信息(用户和语言)存储在cookie中。表单有2个锚标签和一些根据所选语言动态变化的标签。
<form id="frm0" method="post" action="">
<fieldset>
<div id="lng" style="text-align: right">
<a href="index.php?lang=en" id="en" title="English"><img src="pics/files/en.png" alt="English" /></a>
<a href="index.php?lang=de" id="de" title="Deutsch"><img src="pics/files/de.png" alt="Deutsch" /></a>
</div>
<div>
<label for="usr" style="font-weight: bold">User for en/Benutzer for de: </label>
<input name="usr" type="text" id="usr">
</div>
<div>
<label for="passw" style="font-weight: bold">Password for en/Kennwort for de: </label>
<input name="passw" type="password" id="passw">
</div>
</fieldset>
<input type="submit" name="sbmt" id="sbmt" value="Login">
</form>
<form id="frm0" method="post" action="">
<fieldset>
<div id="lng" style="text-align: right">
<a href="index.php?lang=en" id="en" title="English"><img src="pics/files/en.png" alt="English" /></a>
<a href="index.php?lang=de" id="de" title="Deutsch"><img src="pics/files/de.png" alt="Deutsch" /></a>
</div>
<div>
<label for="usr" style="font-weight: bold">User for en/Benutzer for de: </label>
<input name="usr" type="text" id="usr">
</div>
<div>
<label for="passw" style="font-weight: bold">Password for en/Kennwort for de: </label>
<input name="passw" type="password" id="passw">
</div>
</fieldset>
<input type="submit" name="sbmt" id="sbmt" value="Login">
</form>
以下代码:
$(document).ready(function(){
$('a').click(function(){
var language = $(this).attr("id");
$.cookie('lang', language, { path: '/', expires: 14 });
});
});
正确设置cookie,但只能在锚点标记上单击一次。如果我再次更改语言,则不会刷新cookie的值。但是,如果我添加“return false”:
$(document).ready(function(){
$('a').click(function(){
var language = $(this).attr("id");
$.cookie('lang', language, { path: '/', expires: 14 });
});
});
每次点击锚标记后都会正确设置cookie的值,但页面上的标签不会根据所选语言而改变(就像页面没有刷新一样)。
我也尝试过:
$(document).ready(function(){
$('a').click(function(){
var language = $(this).attr("id");
$.cookie('lang', language, { path: '/', expires: 14 });
return false;
});
});
$(document).ready(function(){
$('a').click(function(){
var language = $(this).attr("id");
$.cookie('lang', language, { path: '/', expires: 14 });
return false;
});
});
但是同样的行为。 有什么帮助吗?谢谢。
答案 0 :(得分:0)
return false
阻止您的主播点击,因此设置了Cookie但页面不刷新,因此您的语言不会更改。
您可以尝试以下内容:
$(document).ready(function()
{
$('a').click(function(event)
{
var language = $(this).attr("id");
alert(language);
$.cookie('lang', language, { path: '/', expires: 14 });
e.preventDefault(event);
alert($.cookie('lang'));
window.location($(this).attr("href"));
});
});
但是,我认为它与return false
相同,你会得到相同的结果。我会检查cookie是否正在改变,并且它不再是页面刷新和链接目的地。
您能告诉我们两个警报的回复吗?我觉得这与加载过程有关。
由于Url中包含语言,是否值得检查页面加载?
$(document).ready(function() {
var language = $.cookie("lang");
if(language.length > 0)
{ // Do things for the set language }
else
{
language = $.QueryString["lang"];
$.cookie("lang", language);
// Do things for QueryString language
}
alert(language); // If you want to check the language set?
});
您可以从此SO问题中获取QueryString值:How can I get query string values in JavaScript?
获取QueryString值的选项很多,但我个人倾向于BrunoLM的回答。