2012-06-29 65 views
0

我想創建一個FAQ列表。答案在第一次點擊時顯示正常,但我希望能夠點擊另一個問題並讓該答案展開,另一個關閉。這裏的JavaScript:只有第一個FAQ元素擴展點擊 - jquery

$(document).ready(function() { 
// hide all the answers 
$('.faq li div').hide(); 
$('.faq li').click(function(){ 
var question = $(this); 
var answer = $(this).find('div'); 
// if the faq isn't active 
if(!$('.faq li').hasClass('active')) { 
     answer.slideDown(); 
     $(this).siblings('div').slideUp(); 
     question.addClass('active'); 
} 
else { 
    answer.slideUp(); 
    question.removeClass('active'); 
} 

}); 



}); 

的CSS:

ul.faq { 
list-style:none; 
cursor:pointer; 
z-index:1; 

} 

ul.faq li h3 { 
background:#0A5C75 url(../images/faq-inactive.png) right no-repeat; 
color:#fff; 
padding:20px 50px 20px 10px; 
margin-bottom:10px; 
border:1px solid #fff; 
} 
ul.faq li.active h3 { 
background:#0A5C75 url(../images/faq-active.png) right no-repeat; 

} 
ul.faq li div { 
background:#FFFFFF; 
margin:0px 10px 10px 10px; 
padding:20px; 
overflow:hidden; 
/* added fixed width to stop the jerkyness*/ 
width:522px; 
position:relative; 
top:-10px; 
box-shadow: inset 0px 4px 4px 0px rgba(63, 70, 76, 0.15), 0px 4px 4px rgba(63, 70, 76, 0.15); 
} 

和HTML

<ul class="faq"> 
     <li> 
      <h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut arcu magna, sodales vel dignissim pharetra, adipiscing sed orci?</a></h3> 
      <div>Vivamus rutrum arcu sit amet dolor pulvinar dictum. Etiam porttitor leo eget velit volutpat quis ultricies urna ornare. Quisque ac ultrices est. Ut lobortis malesuada justo, sed blandit sapien bibendum et. Donec vel ante eu orci pellentesque dictum. Phasellus molestie egestas du</div> 
     </li> 
     <li> 
      <h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut arcu magna, sodales vel dignissim pharetra, adipiscing sed orci?</a></h3> 
      <div>This is the answer to question 2</div></li> 
     <li> 
      <h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut arcu magna, sodales vel dignissim pharetra, adipiscing sed orci?</a></h3> 
      <div>This is the answer to question 3</div> 
     </li> 
</ul> 

回答

1

工作演示http://jsfiddle.net/e3Bec/ORhttp://jsfiddle.net/XGJXM/

你的代碼是正確的唯一的事情就是用==>的if (!$(this).hasClass('active')) {代替if(!$('.faq li').hasClass('active')) {:)此外你不需要這在您的第一個條件檢查question.addClass('active');

其餘代碼應該幫助,:)

代碼

$(document).ready(function() { 
    // hide all the answers 
    $('.faq li div').hide(); 
    $('.faq li').click(function() { 
     $('div').slideUp(); 
     var question = $(this); 
     var answer = $(this).find('div'); 
     // if the faq isn't active 
     if (!$(this).hasClass('active')) { 
      answer.slideDown(); 
      $(this).siblings('div').slideUp(); 
      //question.addClass('active'); 

     } 
     else {   
      answer.slideUp(); 
      question.removeClass('active'); 
     } 

    }); 



});​ 
+0

在JSfiddle中使用Firefox 13時,如果以「隨機」順序單擊元素,則此代碼會產生一種非常奇怪的行爲,Chrome中也會出現同樣的奇怪行爲。 –

+0

@limelights cooleos男子 - 我試圖在safari mac osx獅子,歡呼評論,雖然wats在firefox bruv的行爲,再次感謝評論':)' –

+0

有時當你點擊「隨機」順序的元素,點擊停止工作,需要點擊兩下才能打開!可能是小提琴和我一起擰! :) –

1

我想我可以在你的代碼提高了一點,產生的行爲以及通過公平一點縮短代碼。

請注意,我跳過了使用您的主動類來展示如何實現它。

Here's a tinker.io for demo我在FF13和Chrome

$('.faq li div').hide(); 
$('.faq li').click(function(event) { 

    var clickedQuestion = event.target; 
    var answer = $(clickedQuestion).siblings('div'); 

    if($('ul.faq').find('div').is(':visible')){ 
     $('ul.faq').find('div').slideUp();  
    } 
    answer.slideDown(); 

}); 
1

我喜歡你是不是向上滑動的元素,如果它已經可見了測試。

也許將.hide移動到css「display:none」中,沒有意義等待dom加載來隱藏它們。

$(document).ready(function() { 
    $('.faq li').click(function(event){ 
    $(this).find('div').not(":visible").slideDown(); 
    $('.faq li div:visible').not($(this).find('div')).slideUp(); 
    }); 
}); 
+0

感謝您的反饋人員。很有幫助。我剛開始添加了一行以隱藏所有答案,否則我使用上面的代碼,非常乾淨。 ('。faq li div')。hide(); \t $('。faq li')。Cheers $(document).ready(function(){$點擊(function(event){(this).find('div')。not(「:visible」)。slideDown(); $('。faq li div:visible')。not($(this ).find('div'))。slideUp(); }); }) – steve

+0

實際上,只是另一件事,這不允許我點擊'可見'答案+問題來自我約束。我將如何做到這一點? – steve

+0

嗨史蒂夫,對不起,沒有看到這一點。在click函數的第一行中,用.slideToggle()替換.not(「:visible」)。slideDown() – Cameron