[英]jquery toggle won't close on click
我有此代码用于手风琴样式切换。 效果很好,唯一的问题是,如果您单击打开的手风琴,它会先滑后滑。 它不会滑动关闭。
有什么想法吗?
谢谢!
//toggles 2
$('body').on('click','.toggle h3 a', function(){
if($(this).parents('.toggles').hasClass('accordion')) return false;
$(this).parents('.toggles').find('.toggle > div').slideUp(300);
$(this).parents('.toggles').find('.toggle h3 a i').attr('class','icon-plus-sign');
$(this).parents('.toggles').find('.toggle').removeClass('open');
$(this).parents('.toggle').find('> div').slideDown(300);
$(this).parents('.toggle').addClass('open');
//switch icon
if( $(this).parents('.toggle').hasClass('open') ){
$(this).find('i').attr('class','icon-minus-sign');
} else {
$(this).find('i').attr('class','icon-plus-sign');
}
return false;
});
<div class="toggles">
<div class="toggle accent-color"><h3><a href="#"><i class="icon-minus-sign"></i>First Accord</a></h3>
<div>
Content
</div>
</div>
<div class="toggle accent-color"><h3><a href="#"><i class="icon-minus-sign"></i>Second Accord</a></h3>
<div>
Content
</div>
</div>
这么做很简单。 您的函数始终执行slideUp和slideDown。 以该顺序。 因此,当您的div合拢时,它将执行slideUp(由于已经合拢,实际上并没有做任何事情),然后将执行slideDown。 现在,当div展开时:div将会slideUp(这一次是因为Up没有折叠,所以它确实Up了),然后Down了。
更好的方法是使用SlideToggle。
http://api.jquery.com/slidetoggle/
编辑:此外,您可以检查div是否折叠,或者...
if($(element).is(':visible')){
//expanded
} else {
//collapsed
}
抱歉,我不太了解您的代码正在发生什么,所以我从头重写了js部分: http : //jsfiddle.net/d503n47r/2/
$('body').on('click','.toggle h3 a', function(e){
e.preventDefault();
if($(this).parents('.toggles').hasClass('accordion')) return false;
if ($(this).parents('.toggle').find('div').eq(0).hasClass('open')) {
$(this).parents('.toggle').find('div').eq(0).removeClass('open').slideUp();
} else {
$('.toggle.open').removeClass('open');
$(this).parents('.toggle').find('div').eq(0).addClass('open').slideDown();
}
});
请看一下jquery UI,因为它对所有这些常见的事情都有很大帮助http://jqueryui.com/ (无需重新发明轮子)
MinusFour是正确的,它同时发射两个。
解决此问题的一种方法是执行一个if / then语句,检查它是否打开,然后触发依赖于此的打开/关闭。
我还向向上/向下滑动的容器添加了“ toggle-panel”类,以使后续内容更易于阅读。
if($(this).closest('.toggle').hasClass('open')){
console.log('open');
$(this).parents('.toggle').find('.toggle-panel').slideUp(300);
$(this).closest('.toggle').removeClass('open');
return
}
else {
console.log('close');
$(this).parents('.toggles').find('.toggle h3 a i').attr('class','icon-plus-sign');
$(this).parents('.toggle').find('.toggle-panel').slideDown(300);
$(this).parents('.toggle').addClass('open');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.