1

我有一个多语言登录站点,我想使用 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>

以下代码:

$(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 });
      return false;
  });
});

每次点击锚标记后,cookie的值都会正确设置,但页面上的标签不会根据所选语言而改变(就像页面没有刷新一样)。

我也尝试过:

  $('#lng a').click(function() {
    $.cookie('lang', this.id, { path: '/', expires: 14 });
    return false;
  });

但同样的行为。请问有什么帮助吗?谢谢你。

4

1 回答 1

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 值:如何在 JavaScript 中获取查询字符串值?

获取 QueryString 值的选项很多,但我个人更喜欢 BrunoLM 的答案。

于 2012-09-21T12:45:05.923 回答