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を正しく設定しますが、アンカータグを1回クリックした後のみです。言語を再度変更しても、Cookieの値は更新されません。ただし、「returnfalse」を追加すると、次のようになります。

$(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あり、同じ結果が得られると思います。私はクッキーが変化していること、そしてそれがページの更新とリンク先の周りではないことを確認しているでしょう。

両方のアラートが何を返しているか教えていただけますか?ロードプロセスに関係しているような気がします。

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 に答える