2008-12-19 140 views
10

我已經使用jquery手風琴插件在頁面上設置了一些手風琴,這樣我就可以實現全部展開並摺疊所有功能。Jquery手風琴關閉然後打開

每個ID元素是它自己的手風琴和下面的代碼工作,以全部關閉不管哪些是已經打開:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") 
    .accordion("activate", -1) 
; 

我的問題是與全部展開。當我把它們都與此代碼擴展:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") 
    .accordion("activate", 0) 
; 

有些人會合同,有的將擴大基於他們是否是以前打開。

我的想法是糾正這個問題,將它們全部摺疊起來,然後在點擊展開全部時展開它們。然而,這個代碼將無法正確執行:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") 
    .accordion("activate", -1) 
; 
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") 
    .accordion("activate", 0) 
; 

它只會命中第二個命令,並不會先關閉它們。有什麼建議麼?

回答

32

我不完全確定你在做什麼,但這是我最好的猜測。在所有手風琴中,您希望「全部打開」按鈕打開所有已關閉的手風琴(即沒有部分顯示)。我會通過使用filter()

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata") 
    .filter(":not(:has(.selected))") 
    .accordion("activate", 0) 
; 

這就是你以後的樣子嗎?


編輯解釋說,過濾功能:

過濾功能只是貫穿過濾您當前選擇,消除任何不匹配。它有兩種不同的形式:一種是你傳入常規jQuery查詢,就像我上面所做的一樣,另一種是你可以定義一個函數來過濾。如果函數返回false,那麼該元素將被刪除。

在這種情況下,查詢將刪除任何沒有(:not)擁有的(:has)類別爲「selected」(.selected)的孩子。我在這裏使用了.selected選擇器,因爲這是手風琴爲當前打開的面板添加的內容。

如果你只有一個手風琴,或者你給每個手風琴某種標識符,比如一個類名,那麼你可以大大減少整個腳本。讓我們說,對於你想變成手風琴的每一個元素,你都會給它一個「一致」的類。

$(".accord:not(:has(.selected))").accordion("activate", 0); 

這是更爲清晰和易於維護,因爲你可以很容易地在未來增加更多的手風琴,如果你想,這將處理它。

的過濾器的文檔是在這裏:http://docs.jquery.com/Traversing/filter

+0

哇!那很完美!你能向我解釋.filter代碼行嗎?它工作的很好,但我真的很想明白它爲將來的參考做什麼(我是jquery的新手)。謝謝你的幫助! Jon – Jon 2008-12-22 13:25:34

+0

很好的解釋!這對未來會有很大的幫助。 – Jon 2008-12-22 15:20:13

0

我有同樣的問題,並與一些短代碼利用JQuery的每一個()函數,而將焦點設置項[0],這樣正常航行可以崩潰解決它恢復。

http://spstring.jeffthink.com/?p=49

2
jQuery('#accordion').accordion({   
    active:-1, 
});