我有下面粘貼或看到它在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