【问题标题】:JQuery - Remember open accordion stateJQuery - 记住打开手风琴状态
【发布时间】:2018-02-27 07:04:00
【问题描述】:

我目前有一个 jquery 手风琴,它完全符合我的要求,除了一件事。当我单击手风琴面板中的链接以转到另一个页面时,我希望手风琴在单击后退按钮时在同一位置(如果可能)保持打开状态。后退按钮是我创建的图像,而不是浏览器的后退按钮。

这是我的 jquery 脚本:

<script>
 $(function() {
    $(".jquery-ui-accordion").accordion({
        autoHeight: false,
        collapsible: true,
        heightStyle: "content",
        active: false,
        animate: 300 // collapse will take 300ms
    });
    $('.jquery-ui-accordion h3').bind('click',function(){
        var self = this;
        setTimeout(function() {
            theOffset = $(self).offset();
            $('body,html').animate({ scrollTop: theOffset.top - 100 });
        }, 310); // ensure the collapse animation is done
    });
});
</script>

这是我的标题中的内容:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>

它可以很好地打开和滚动,如果另一个手风琴面板中有很长的文本,则单击的面板将跳转到屏幕视图。

我不想更改它当前的功能,我只想在单击后退按钮图像时添加一个记住状态。

我已经阅读了有关 jquery cookie 的信息,但老实说,我什至不知道从哪里开始包含它。

任何帮助将不胜感激!

【问题讨论】:

  • 如果不需要支持IE7,使用localStorage
  • 对不起,菜鸟,不知道 localStorage 是什么或如何使用

标签: jquery jquery-ui accordion jquery-ui-accordion jquery-cookie


【解决方案1】:

您可以使用localStorage,如下所示:

$(document).ready(function () {
        var selectedIndex = localStorage.getItem("selected"),
            // If a valid item exits in localStorage use it, else use the default
            active = (selectedIndex >= 0) ? parseInt(selectedIndex) : false;
        console.log(active);
        $(".jquery-ui-accordion").accordion({
            active: active,
            autoHeight: false,
            collapsible: true,
            heightStyle: "content",
            animate: 300, // collapse will take 300ms,
            activate: function (event, ui) {
                if (ui.newHeader.length) // item opened
                    var index = $('.jquery-ui-accordion h3').index(ui.newHeader);
                if (index > -1)  // has a valid index
                    localStorage.setItem("selected", index);


            }
        });

        $('.jquery-ui-accordion h3').bind('click', function () {
            var self = this;
            setTimeout(function () {
                theOffset = $(self).offset();
                $('body,html').animate({
                    scrollTop: theOffset.top - 100
                });
            }, 310); // ensure the collapse animation is done
        });
    });

在使用它之前不要忘记check whether localStorage is supported or not。你回退到 cookie 做同样的事情。

【讨论】:

  • 我在上面复制了您的脚本,但它不起作用。它实际上将我所有的手风琴面板默认为打开状态,然后当我单击指向另一个页面的链接并在返回时单击我的后退箭头时,它并没有带我回到我现在所在的位置。我希望该行为模仿 jquery.cookie.js 的功能,但我无法让滚动顶部功能正常工作,因此将其丢弃。非常感谢您的帮助。
  • 我在本地测试了上述内容,对我来说效果很好。您是如何“将所有手风琴面板默认为打开状态”..?你能用你到目前为止的任何东西创建一个在线演示......吗?您不应将此类信息排除在问题之外。如果你想出一个不同的描述,这实际上意味着你浪费了所有试图回答的人的时间,这是非常令人失望的。 jquery.cookie.js 做了什么..?今后,请在发布前对问题进行校对,并确保所有内容都包含在说明中。
  • 我没有将手风琴默认为打开状态,您上面的脚本做到了。如果我没有正确解释,我很抱歉,但我会再试一次。目前这是我的手风琴所做的: 1. 单击主菜单上的链接,进入手风琴页面。 2. 单击手风琴中的一个面板,手风琴打开并显示带有指向其他页面的链接的菜单。 3. 单击手风琴面板中的一个链接,转到另一个页面。 4 单击后退箭头返回手风琴面板,所有手风琴菜单现已关闭。
  • 我希望它做的是相同的步骤,但在第 4 步中,我希望我之前打开的手风琴面板点击链接仍然打开,并且在我点击的同一个链接上.
【解决方案2】:

您可以创建一个标志并在点击手风琴时将其设置为true

单击后退按钮时,检查标志设置为真还是假。如果设置为true,只需触发该选择器的点击动作即可。

$('.jquery-ui-accordion h3').trigger('click')

【讨论】:

  • 不,这不起作用,而且我不想拿走我的绑定部分,因为这就是让我的手风琴跳到屏幕顶部的原因。老实说,我什至不知道我是否把它放在了正确的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多