再次单击锚标记后,cookie中的值不会刷新

时间:2012-09-21 11:35:47

标签: jquery cookies anchor

我有一个多语言登录网站,我想使用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>&nbsp;
      <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>&nbsp; <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; }); });

但是同样的行为。 有什么帮助吗?谢谢。

1 个答案:

答案 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的回答。