2015-07-02 32 views
0

我有一個Bootstrap手風琴,以及一個擴展了所有手風琴面板的按鈕。這工作正常。確定引起自舉事件的原因

HTML:

<div class="btn btn-primary btn-sm" id="accordion-expand-all">Expand all</div> 

JS:

$("#accordion-expand-all").click(function() { 
    $(".panel-collapse").each(function() { 
     if ($(this).hasClass("in") === false) { 
      $(this).collapse("toggle"); 
     }; 
    }); 
}); 

問題:

我想使它這樣,當一個用戶點擊面板的標題,如果手風琴面板被摺疊,那麼面板e xpands ... 窗口向下滾動,手風琴面板的標題位於頁面的頂部。

一個簡單的方法是將一些函數調用到引導程序shown.bs.collapse事件中,如pageScrollToTop(expandedPanel)。但是這與「全部展開」按鈕相沖突,每次展開手風琴面板時都會產生shown.bs.collapse,從而在整個位置滾動頁面。

我知道這是件不可思議的事,但是當復活的是shown.bs.collapse事件,是有確定它是否是由用戶的點擊提出,對被編程募集的方式(如「全部展開」按鈕) ?如果是這樣,我的網站會知道什麼時候不要致電pageScrollToTop()

回答

1

在有人點擊未展開的手風琴項目後,您可以觸發一次只發生的事件。這並不完全是你以後(確定以編程方式觸發vs用戶觸發事件),但它應該工作。

$('a[data-toggle=collapse]').on('click', function(){ 
    if($(this).is('.collapsed')) { 
     $(this.getAttribute('href')).one('shown.bs.collapse', function(){ 
      $(document.body).stop().animate({scrollTop: $(this).offset().top}); 
     }); 
    } 
}); 

這裏有一個演示:http://jsfiddle.net/97vju2b7/

+0

這是一個類似的方法,我結束了使用的解決方法:我連着一個單擊處理手風琴面板頭,並創建了一個「模擬」'秀。之後滾動頁面的bs.collapse'事件(我在Bootstrap的本地代碼中窺探了如何做到這一點)。按鈕只是迭代手風琴面板並調用'$(「#foo-panel」)。collapse(「toggle」)',這引發了真正的show.bs.collapse事件。 – alex