我在下面粘贴了折叠菜单的代码,或者在jsfiddle上查看。
问题是当子菜单处于向上滑动状态并再次单击它时,它会停止但没有向后动画(相反,子菜单正在跳出但它们的容器保持其当前高度 - jQuery 2.0.0 没有跳跃.b1)。在 Firefox 和 Chrome 中测试,结果相同。
这是一个 jQuery 错误,还是只有我?
更新:我已经为 jQuery提交了一个错误报告,因为我认为这是一个 jQuery 错误。
更新 2:请参阅 Brad M 接受的答案以及对此行为的解释(但我仍然认为这是 jQuery 的一个问题,需要在内部解决)。
HTML
<ul>
<li><a href="#">Menu1</a></li>
<li class="opened"><a href="#">Submenus 1</a>
<ul class="submenu">
<li><a href="#">submenu1-1</a></li>
<li><a href="#">submenu1-2</a></li>
</ul></li>
<li class="closed"><a href="#">Submenus 2</a>
<ul class="submenu">
<li><a href="#">submenu2-1</a></li>
<li><a href="#">submenu2-2</a></li>
</ul></li>
<li><a href="#">Menu4</a>
</li>
</ul>
Javascript
var initMenu = function() {
$("li.closed > ul.submenu").css("display", "none");
var toggleMenu = function(li) {
if (li.hasClass("opened") || li.hasClass("inslidedown")) {
li.removeClass("opened inslidedown").addClass("inslideup").find("ul").first().stop(true).slideUp({
duration: 1000,
complete: function() {
li.addClass("closed").removeClass("inslideup");
}
});
}
else if (li.hasClass("closed") || li.hasClass("inslideup")) {
li.removeClass("closed inslideup").addClass("inslidedown").find("ul").first().stop(true).slideDown({
duration: 1000,
complete: function() {
li.addClass("opened").removeClass("inslidedown");
}
});
}
};
$("ul").on("click", "li.opened a, li.closed a, li.inslideup a, li.inslidedown a", function(e) {
e.preventDefault();
toggleMenu($(this).closest("li"));
});
};
$(document).ready(function() {
initMenu();
});