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

时间:2015-02-27 20:44:18

标签: javascript jquery html-lists slideup

与这个badboy有一些问题:

基本上需要它,以便当其中一个隐藏列表折叠时,检查标记是否有任何其他活动的'列表已经打开,并在打开新列表之前关闭它们。如果不止一个同时打开,它看起来很麻烦。

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

尝试:
 1.单击菜单
 2.单击服务
 3.单击普拉提以扩展
 4.单击“健身”以展开

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

我的代码目前所做的是检查是否有一个全局定义的变量打开了什么名为' somethingOpen' - 在页面加载时将其设置为null。这一切都很好,但我觉得它可能与完整的显示有关:没有可折叠列表:

因为它的清晰和明确,我只会在这里包含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

2 个答案:

答案 0 :(得分:0)

试试这个:

//$("#cssmenu > ul > li.active").removeClass('active').slideUp(); // -- problem here

$("#cssmenu > ul > li.active").animate({height: "toggle", opacity: "toggle"}, 'fast');

答案 1 :(得分:0)

对于任何感兴趣的人,需要稍微调整一下,使用children()和after(&gt;)来正确选择正确的元素。

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
相关问题