为什么我的jquery cookie不能在多个页面上使用?

时间:2012-02-03 09:23:24

标签: jquery cookies

本周我研究并整理了一些jquery(我第一次使用jquery)来控制自定义WordPress sidebar.php文件中的可折叠菜单。菜单是动态生成的,使用wp_query按自定义分类和自定义排序顺序等选择和排序自定义帖子类型(因此没有插件解决方案)。

我希望在网站访问者浏览内容时保持菜单部分的展开/折叠状态。使用jquery看起来我成功地将唯一的cookie名称写入浏览器,看来我成功通过了"扩展"或者"倒塌"我的标签的类值。

但是,Cookie不能跨多个页面工作 - 如果您导航到另一个页面,则在单​​击菜单项之前不会设置新的Cookie。如果您点击后面的浏览器并返回上一页,那么您在上一页上设置的Cookie 仍然设置(这很好)。请注意,当导航到新页面时,菜单会重新生成,但菜单内容很少更改(因此ID是稳定的),并且cookie仅适用于当前会话(并且仍应保留在上一页中)

我已尝试过设置PHP Cookie,并且它们在页面之间保持良好状态。但是我的jquery cookies似乎是针对特定页面的,所以我做错了。

这里是我的PHP页面中出现的jquery代码,用于控制菜单和编写我的cookie(注意:我链接到jquery.cookie.js插件):

        <script type="text/javascript">
        $(document).ready(function() {
            setTimeout(function() {
                $('#port-menu > li > a.expanded + ul, #port-menu > li ul li > a.collapsed + ul').slideToggle('medium');
                $('#port-menu > li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var cookiename = $(this).parent().attr('id');
                    $.cookie(cookiename, $(this).attr('class'));
                });
                $('#port-menu > li ul li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var vargenre = $(this).parent().parent().parent().attr('id');
                    var varoutlet = $(this).parent().attr('id');
                    var cookiename = vargenre + varoutlet;
                    $.cookie(cookiename, $(this).attr('class'));
                });
            }, 250);
        });
    </script>

例如,动态创建的cookie名称和值如下所示:

  

genre2:已崩溃

     

genre3:扩展

     

genre1outlet2:扩展

     

genre2outlet3:扩展

     

genre2outlet4:已扩展

如上所述,我是jquery的新手。我也是使用cookies的新手。任何帮助将不胜感激。

P.S。一旦我开始工作,我就不知道如何从我的cookie数组中获取信息并将这些类应用到我的菜单中 - 但这是一个单独的问题。

1 个答案:

答案 0 :(得分:17)

我认为您应该尝试指定路径。它看起来像这样:

$.cookie(cookiename, $(this).attr('class'), { path: '/' });

然后,当您设置cookie时,它将适用于所有网站。默认路径是设置cookie的子页面的路径。在这种情况下,cookie仅适用于该子页面。

此规则(我的意思是路径)一般适用于Cookie。 不仅由jQuery创建的那些。