我有下面粘贴或看到它在jsfiddle崩溃菜单中的代码。问题与停止(真).slideDown()效果基本show()时,是一个jQuery的错误?
问题是,当子菜单处于向上滑动状态时,再次单击该按钮,它会停止但不会向后动画(而不是子菜单跳出,但它们的容器保持其当前高度 - 不跳jQuery 2.0.0.b1)。在Firefox和Chrome中测试的结果相同。
这是一个jQuery bug,或者只是我吗?
更新:我有filed a bug report为jQuery,因为我认为这是一个jQuery的bug。
更新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();
});
哇,这[很好](http://jsfiddle.net/HuCmy/37/)!谢谢。不知何故,我没有看到你的答案,对不起。 – 2013-02-20 17:43:06