折りたたみメニューのコードを下に貼り付けるか、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();
});