.slideup()删除整个ul,而不仅仅是嵌套的li

.slideup() removing entire ul instead of just the nested li

本文关键字:不仅仅是 嵌套 li ul 删除 slideup      更新时间:2023-09-26

与这个坏蛋有一些问题:

基本上需要它,这样当其中一个隐藏列表折叠时,就会检查标记,看看是否有其他"活动"列表已经打开,并在打开新列表之前关闭这些列表。如果同时打开多个,看起来会很乱。

链接:http://www.matchboxlondon.com/ten/menu3/index.html

尝试:
1.单击菜单
2.单击"服务"
3.单击"普拉提"展开
4.单击Fitness以展开

问题:使用.slideup()时,标题也会被删除。

我的代码目前正在做的是检查是否有任何东西是用一个名为"somethingOpen"的全局定义变量打开的——在页面加载时,这个变量被设置为null。这一切都很好,但我觉得这可能与完整的显示有关:没有可折叠列表:

因为它是listy和nesty,所以我只在这里包括js,而不包括标记:

somethingOpen = null; // to set after close and open
    $('#cssmenu > ul > li > a').click(function () {
        if (somethingOpen === true) { // first check
            $("#cssmenu > ul > li").each(function () {
                $("#cssmenu > ul > li.active").removeClass('active').slideUp(); // <-- problem here
                somethingOpen = false; // closing so set to false
                return false; // exit function
            });
        } // End somethingOpen if
        // Open
        var checkElement = $(this).next(); // more checks
        $(this).closest('li').addClass('active'); // add active class
        somethingOpen = true; // redefine if anything is open
        // Close
        if ((checkElement.is('ul')) && (checkElement.is(':visible'))) {
            $(this).closest('li').removeClass('active');
            checkElement.slideUp('normal');
            somethingOpen = false;
        }
        if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
            $('#cssmenu ul ul:visible').slideUp('normal');
            checkElement.slideDown('normal');
        }
        // Returns
        if (checkElement.is('ul')) {
            return false;
        } else {
            return true;
        }
    }); // End click

试试这个:

//$("#cssmenu > ul > li.active").removeClass('active').slideUp(); // -- problem here
$("#cssmenu > ul > li.active").animate({height: "toggle", opacity: "toggle"}, 'fast');

对于任何感兴趣的人来说,它需要进行一些调整,使用children()和after(>)来正确选择正确的元素。

somethingOpen=null;//关闭和打开后设置

$('#cssmenu > ul > li > a').click(function () {
    if (somethingOpen === true) { // first check
        $("#cssmenu > ul > li").each(function () {
            $("#cssmenu").children('.active').removeClass('active');
            $("#cssmenu > ul > li > ul").slideUp('normal');
            somethingOpen = false; // closing so set to false
            return false; // exit function
        }); // end each
    }
}); // End somethingOpen if