.slideup() 删除整个 ul 而不仅仅是嵌套的 li
.slideup() removing entire ul instead of just the nested li
这个坏小子有一些问题:
基本上需要它,以便当其中一个隐藏列表折叠时检查标记以查看是否有任何其他 'active' 列表已经打开,并在打开新列表之前关闭这些列表。多个同时打开会显得很乱
Link:
http://www.matchboxlondon.com/ten/menu3/index.html
尝试:
1. 点击菜单
2. 单击服务
3.点击普拉提展开
4.点击健身展开
问题: 使用 .slideup() 时标题也被删除。
我的代码目前正在做的是检查是否使用名为 'somethingOpen' 的全局定义变量打开了任何内容 - 这在页面加载时设置为 null。这一切都很好,但我觉得它可能与可折叠列表的完整 display:none 有关:
因为它是 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() 和后缀 (>) 来正确 select 正确的元素。
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
这个坏小子有一些问题:
基本上需要它,以便当其中一个隐藏列表折叠时检查标记以查看是否有任何其他 'active' 列表已经打开,并在打开新列表之前关闭这些列表。多个同时打开会显得很乱
Link: http://www.matchboxlondon.com/ten/menu3/index.html
尝试:
1. 点击菜单
2. 单击服务
3.点击普拉提展开
4.点击健身展开
问题: 使用 .slideup() 时标题也被删除。
我的代码目前正在做的是检查是否使用名为 'somethingOpen' 的全局定义变量打开了任何内容 - 这在页面加载时设置为 null。这一切都很好,但我觉得它可能与可折叠列表的完整 display:none 有关:
因为它是 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() 和后缀 (>) 来正确 select 正确的元素。
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