jQuery.cookie:尽管代码非常简单,但没有更新cookie

时间:2011-08-10 16:47:15

标签: javascript jquery cookies

我只有一个可以隐藏的块的菜单。为了在访问期间记住他们的状态,我决定使用jQuery.cookie() 我的代码非常基础:

jQuery(document).ready(function(){
    $(".titre_acordeon").next().hide();
    $(".titre_acordeon").each(function () {
        jQuery.cookie($(this).parent().attr("id"),false, {path: "/"});
    });
    $(".titre_acordeon_0").next().show();
    $(".titre_acordeon_0").each(function () {
        jQuery.cookie($(this).parent().attr("id"),true, {path: "/"});
    });
});
jQuery(document).ready(function(){
    $(".titre_acordeon, .titre_acordeon_0").click(function() {
        $(this).next().toggle("medium");
        var id = $(this).parent().attr("id");
        var valeur_id = jQuery.cookie(id);
        alert(valeur_id)
        if ( valeur_id == true)
        {
            jQuery.cookie(id, false, {path: "/"});
        }
        else if ( valeur_id == false)
        {
            jQuery.cookie(id, true, {path: "/"});
        }
        alert(jQuery.cookie(id))
    });
});

” 如果没有例外,cookie值永远不会改变:显示/隐藏工作,如果我将“if(valeur_id == true)”更改为“if(valeur_id)”,则cookie会更改但只会改变一次

我太绝望了!这应该很容易!

这是为了阅读本文!

1 个答案:

答案 0 :(得分:2)

如果您使用此“插件”

https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js

您的问题是您正在为您的cookie编写一个布尔值,该cookie在写入cookie时被转换为字符串。从cookie中读回不会反过来翻译。因此,无论您是将true还是false放入Cookie中,都需要检查

if ( valeur_id == true)

总是计算为布尔值true。这是因为"true""false"都是在这种检查中评价为“真实”的字符串。

如果你想坚持使用那个库,你应该在cookie中编写字符串,并期望读取字符串。

$.cookie( 'cookieName', 'true' );

if ( $.cookie( 'cookieName' ) === 'true' )

重要提示:

顺便说一句,如果你在页面上运行整个代码示例,那么当你重新加载页面时,你永远不会看到点击读取cookie的结果。您的第一个代码块会覆盖先前页面加载点击所设置的内容。