0

Cookieを設定する関数があり、一部のリンクに.bind()を設定して、クリックしたときにCookie関数をトリガーするようにしています。現在、クリックしてもCookieは設定されていません。私はこれに何時間も費やしましたが、それを理解することはできません。

<script type="text/javascript"> function createCookie(name,value,days) { 
if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = ";
 expires=" + date.toGMTString();
}
else {
    var expires = "";
}
document.cookie = name + "=" + value + expires + "; path=/";
}
$("a#en").bind("click", function () {
    createCookie('TR_LNG', 'en', 90);
});
$("a#fr").bind("click", function () {
    createCookie('TR_LNG', 'fr', 90);
});
$("a#de").bind("click", function () {
    createCookie('TR_LNG', 'de', 90);
});
$("a#ja").bind("click", function () {
    createCookie('TR_LNG', 'ja', 90);
});
$("a#pl").bind("click", function () {
    createCookie('TR_LNG', 'pl', 90);
});
$("a#es").bind("click", function () {
    createCookie('TR_LNG', 'es', 90);
});
</script> 

HTML

<div id="langselectsplash" class="langselectsplash">
    <div id="select">
        <img src="http://mysite.org/wp-content/uploads/2012/08/sarvalogo2.png"
        />
        <p>
            <style>
            #tr_setdeflang {
                display:none;
            }

            </style>
            <div class="no_translate transposh_flags">
                <a id="en" href="/about/" class="tr_active">English</a>
                <a id="fr" href="/fr/about/">Français</a>
                <a id="de" href="/de/about/">Deutsch</a>
                <a id="ja" href="/ja/about/">日本語&lt;/a>
                <a id="pl" href="/pl/about/">Polski</a>
                <a id="es" href="/es/about/">Español</a>
            </div>
        </p>
    </div>
</div>
<div id="langsplashfade"></div>

上記を出力するPHPコード:

<?php
echo "<script type=\"text/javascript\"> function createCookie(name,value,days) { \nif (days) { \nvar date = new Date();\n date.setTime(date.getTime()+(days*24*60*60*1000));\n var expires = \";\n expires=\"+date.toGMTString();\n} else { \nvar expires = \"\";}document.cookie = name+\"=\"+value+expires+\"; path=/\";}\n";
foreach ($args as $langrecord) {
    echo "$(\"a#{$langrecord['isocode']}\").bind(\"click\", function() {createCookie('TR_LNG','{$langrecord['isocode']}',90);});\n";
}
echo "</script>";
?>
   <?php
echo " <div id=\"langselectsplash\" class=\"langselectsplash\"><div id=\"select\"><img src=\"http://mysite.org/wp-content/uploads/2012/08/sarvalogo2.png\" /><p>";
?>
           <?php
echo "<style>#tr_setdeflang{display:none;}</style><div class=\"" . NO_TRANSLATE_CLASS . " transposh_flags\" >";
foreach ($args as $langrecord) {
    echo "<a id=\"{$langrecord['isocode']}\" href=\"{$langrecord['url']}\"" . ($langrecord['active'] ? ' class="tr_active"' : '') . '>' . "{$langrecord['langorig']}</a>";
}
echo "</div>";
?>
4

2 に答える 2

2

DOM Ready イベントでイベントをバインドするコードを配置する必要があります。

$(document).ready(function(){
//Your code
});

また

$(function(){
//Your code
});
于 2012-08-20T21:22:04.553 に答える
2

ログを見てください:

SyntaxError: unterminated string literal
var expires = ";

あなたが欲しいと思うエラーがあります:

function createCookie(name,value,days) { 
    var expires = "";
    if (days) { 
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = ";expires=" +date.toGMTString();
    }
    document.cookie = name + "=" + value + expires + ";path=/";
}

1行で文字列を開いているので、現時点では決して閉じません。コードは次のように書き換えることができます。

$("#en, #fr, #de, #ja, #pl, #es").bind("click", function() {
    createCookie('TR_LNG', this.id, 90);
});

または、これらのアンカー リンクに css クラスを追加し、代わりにそれをターゲットにすることをお勧めします (たとえば、現在のサイトで$(".transposh_flags a")は、上記のコードと同じことを行います。

于 2012-08-20T21:22:14.380 に答える