我有许多嵌套列表和一些jQuery,显示在单击父标题时隐藏它们。
IT工作正常但行为稍有不妥。如果嵌套列表可见并且单击了父标题,我希望隐藏嵌套列表。此时它会执行此操作,但之后会直接显示嵌套列表。
请参阅此jsFiddle了解工作代码:
答案 0 :(得分:2)
看这里: http://www.jsfiddle.net/dactivo/c3vPa/
我们验证它是否可见,在这种情况下我们隐藏它:
if( $nestList.is(':visible'))
这将是代码:
$("#expander ul").hide();
$("#expander h4").live("click", function(e) {
var $this = $(this);
var $nestList = $($this).parent().find("ul");
var $scrollPane = $(".scroll");
// hide visible nested lists
$("#expander ul:visible").hide("fast", function(){
$(this).closest("li").removeClass("open").addClass("closed");
});
// show this list
if( $nestList.is(':visible'))
{
$nestList.hide();
}
else
{
$nestList.show("fast", function() {
$(this).closest("li").removeClass("closed").addClass("open");
});
}
// resize scrollbars
$scrollPane.jScrollPane();
e.preventDefault();
});
答案 1 :(得分:1)
如果兄弟<ul>
当前被隐藏(实际上是切换),您可以触发该节目,如下所示:
$nestList.filter(":hidden").show("fast", function() {
$(this).closest("li").removeClass("closed").addClass("open");
});
You can test it out here。总的来说,你可以减少它并获得相同的效果,例如:
$("#expander ul").hide();
$("#expander h4").live("click", function() {
$(this).siblings("ul").toggle("fast", function(){
$(this).closest("li").toggleClass("open closed");
}).closest("li").siblings(".open").toggleClass("open closed")
.children("ul").hide("fast");
$(".scroll").jScrollPane();
});