2013-06-29 143 views
0

我已经看到了这个问题的不少迭代,但没有解决我的特定问题。jQuery slideDown()slideUp()需要两次点击

单击h3时触发切换下方链接列表可见性的问题时会出现问题。选择器和行为正常工作,显示隐藏的项目并正确隐藏其他项目。然而,一旦头被点击一次,它必须被点击两次以执行切换。这是一个小烦恼,但我想要一个解决方案。

因此,点击一个标题会关闭它,如果它关闭,如果它是打开的,则分别添加和删除.active类......都很好。

点击另一个标题也会正常运行,隐藏打开的列表并打开点击的标题。

但是,如果你去到第一个标题,以前打开,但现在关闭,只需单击它不会启动切换。它必须再次点击。

这就是问题所在。我对页面代码的访问权限有限,因此大多数遍历选择都必须在jQuery中完成,且标签已经就位。

这里的网页有问题: http://queensvw.com/documents/stackoverflow

这里是jQuery的:

$(document).ready(function() { 
    function hideAll() { 
    $('#minutes_highlights .date_heading').nextAll('.document_listing').slideUp(); 
    } 

    hideAll(); 

    $('#minutes_highlights .date_heading').click(function() { 
    if ($(this).hasClass('active')) { 
     $(this).removeClass('active'); 
     $(this).nextUntil('hr').slideUp(); 
    } else { 
     $(this).addClass('active'); 
     hideAll(); 
     $(this).nextUntil('hr').slideDown(); 
    } 
    }); 
}); 

我尝试添加一个preventDefault()和基于其他线程setTimeout()。说实话,我不确定他们为什么会重要,因为我不是在a上采取行动,但他们并没有解决点击问题。

有关如何避免第二次点击的任何想法?

回答

1

这是因为您在单击其他元素时没有删除活动类。现在,我不能保证这会工作,因为我无法测试它,但我敢肯定这是你改变else条件是:

else { 
    $('.active').removeClass('active'); 
    $(this).addClass('active'); 
    hideAll(); 
    $(this).nextUntil('hr').slideDown(); 
} 

它会奏效。

+0

我真** **真的很讨厌它,当我想念明显的时候。往往是这样。感谢新鲜的眼睛;我总是可以依靠SO来获得正确的发展方向。那样做了。固定。谢谢! – dashard