2017-09-10 227 views
2

我在我正在研究的網站上有一個手風琴。它有一個惱人的錯誤,我無法弄清楚。手風琴沒有關閉

如果您點擊箭頭,手風琴將正確打開和關閉。如果您點擊標題,手風琴將會打開,但在您嘗試關閉時會彈起。

標題和箭頭都在同一個錨點內,所以我明白爲什麼會發生這種情況。

的代碼是:

<div class="accordion"> 
    <div class="accordion-section"> 

     <div class="tab"> 
      <a class="accordion-title accordion-section-button l2" href="#accordion-205"> 
       <h3>How do you differ from estate agents?</h3> 
      </a> 

      <div id="accordion-205" class="accordion-section-content"> 
       <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc mattis ante eget quam volutpat, ac pulvinar massa ornare.</p> 
      </div> 
     </div> 


     <div class="tab"> 
      <a class="accordion-title accordion-section-button l2" href="#accordion-204"> 
       <h3>Why would an estate agent prefer speaking or dealing with yourself?</h3> 
      </a> 
      <div id="accordion-204" class="accordion-section-content"> 
       <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc mattis ante eget quam volutpat, ac pulvinar massa ornare.</p> 
       </div> 
     </div> 

    </div> 
</div> 

$(document).ready(function() { 
    function close_accordion_section() { 
     $('.accordion .accordion-section-button').removeClass('active'); 
     $('.accordion .accordion-section-content').slideUp(300).removeClass('open'); 
    } 

    $('.accordion-section-button').click(function(e) { 
     // Grab current anchor value 
     var currentAttrValue = $(this).attr('href'); 

     if($(e.target).is('.active')) { 
      close_accordion_section(); 
     }else { 
      close_accordion_section(); 

      // Add active class to section title 
      $(this).addClass('active'); 
      // Open up the hidden content panel 
      $('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
     } 

     e.preventDefault(); 
    }); 
}); 

回答

1

的主要問題是這一行:

if($(e.target).is('.active')) { 

當你點擊<h3>元素e.target將是<h3>,而不是<a>。相反,嘗試這樣的事:

if($(this).is('.active')) { 

注意,這是現在在其中添加該類進一步下跌的線是一致的。

+0

,完美的工作 - 謝謝。 – CharlyAnderson

+0

@CharlyAnderson唔,當一個答案適合你並回答你的問題時,[你應該將它標記爲已接受,甚至(如果你喜歡/想要)upvote](https://stackoverflow.com/help/someone-answers) ...爲什麼?因爲它幫助其他用戶找到正確的答案,對於回答者來說是一種獎勵他們的時間和精力......謝謝。我希望你能理解... – LoicTheAztec

0

如果你喜歡,你可以減少一切:

$(document).ready(function() { 
    $('.accordion-section-button').click(function(e) { 
     close_accordion_section(); 
     $(this).toggleClass('active'); 
     $('.accordion ' + this.attributes.href.value)[(this.classList.contains('active')) ? 'slideDown' : 'slideUp'](300) 
        .toggleClass('open'); 
     e.preventDefault(); 
    }); 
}); 
+0

在原始代碼中,它只允許一個部分一次擴展,可能需要同時在兩個不同部分同時使用「slideUp」和「slideDown」。我不相信你的代碼目前處理這種情況。 – skirtle

+0

原始問題(自編輯以來)包含指向可以測試行爲的URL的鏈接。如果您展開一個部分,然後嘗試展開另一個部分,則會在擴展新部分的同時動畫化原始部分的摺疊。除非我錯過了某些東西,否則無法看到代碼處理的內容。 – skirtle

+0

@skirtle添加** close_accordion_section(); **關閉任何以前的打開標籤.....謝謝 – gaetanoM