【问题标题】:why are my jquery cookies not available across multiple pages?为什么我的 jquery cookie 不能跨多个页面使用?
【发布时间】:2012-02-25 22:24:00
【问题描述】:

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

我想在网站访问者浏览内容时保持菜单部分的展开/折叠状态。使用 jquery,我似乎成功地将唯一的 cookie 名称写入浏览器,并且似乎我成功地传递了我的标签的“展开”或“折叠”类值。

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

我已经尝试过设置 PHP cookie,并且它们在页面之间保持得很好。但是我的 jquery cookie 似乎是特定于页面的,所以我做错了。

这是出现在我的 PHP 页面中的 jquery 代码,用于控制菜单并写入我的 cookie(注意:我 am 链接到 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 名称和值如下所示:

流派2:折叠

流派3:扩展

genre1outlet2:扩展

genre2outlet3:扩展

genre2outlet4:扩展

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

附:一旦我得到这个工作,我不知道如何从我的 cookie 数组中获取信息并将类应用到我的菜单 - 但这是一个单独的问题。

【问题讨论】:

  • 设置路径为/,它会

标签: jquery cookies


【解决方案1】:

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

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

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

这条规则(我指的是路径)通常适用于 cookie。 不只是那些由 jQuery 创建的。

【讨论】:

  • 感谢您澄清这一点。
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 2016-05-27
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多