我有一个半工作的example你可以看一下。
这看似按照大多数人的意愿工作,虽然它分享了我在许多其他手风琴中看到的错误,如果你点击已经打开的标题链接,它将被关闭,然后再次打开。
任何优雅的解决方案?
这是jQuery
<script language="javascript">
$(document).ready(function() {
// Simple Accordion Style Menu Function
$('h2.question').click(function() {
$('div.answer').slideUp('normal');
$(this).next().slideDown('normal');
});
// Closes All Divs on Page Load
$("div.answer").hide();
// Opens the first div
var Current = $('.question:first');
Current.next().show();
});
</script>
这是我要使用的基本标记:
<div class="accordion">
<h2 class="question"><a href="#">Header 1</a></h2>
<div class="answer">
<p>some body content 1</p>
<p>some body content 2</p>
<p>some body content 3</p>
</div>
<h2 class="question"><a href="#">Header 2</a></h2>
<div class="answer">
<p>some body content a</p>
<p>some body content b</p>
<p>some body content c</p>
</div>
<h2 class="question"><a href="#">Header 3</a></h2>
<div class="answer">
<p>some body content x</p>
<p>some body content y</p>
<p>some body content z</p>
</div>
</div>
答案 0 :(得分:2)
您可以尝试在h2上添加一个类来记录它的活动状态,然后在每次点击h2时检查一下吗?如果它上面有活动类,则不执行任何操作,因为它已经打开。同样在页面加载时,它为第一个h2.question提供了一个活动类。
<script language="javascript">
$(function() {
// Simple Accordian Style Menu Function
$('h2.question').click(function() {
if(!$(this).hasClass('active')) {
$('div.answer:visible').slideUp('normal').prev('h2.question').removeClass('active');
$(this).addClass('active').next().slideDown('normal');
}
});
// Closes All Divs on Page Load
$("div.answer").hide();
// Opens the first div
var Current = $('h2.question:first');
Current.addClass('active').next().show();
});
</script>