2008-12-19 27 views
10

मैंने jquery accordion प्लगइन का उपयोग करके किसी पृष्ठ पर कई accordions सेट अप किए हैं, इसलिए मैं सभी को विस्तारित कर सकता हूं और सभी कार्यक्षमता को संकुचित कर सकता हूं।Jquery Accordion बंद करें

$("#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

मुझे बिल्कुल यकीन नहीं है कि आप क्या कर रहे हैं, लेकिन यह मेरा सबसे अच्छा अनुमान है। आपके सभी accordions में से, आप बंद कर चुके सभी accordions खोलने के लिए "सभी खोलें" बटन चाहते हैं (यानी, कोई भी अनुभाग दिखा रहा है)। मुझे क्या करना चाहते हैं कि filter()

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

का उपयोग करके क्या आप के बाद कर रहे थे कि है? कि फिल्टर समारोह की व्याख्या करने के


संपादित करें:

फिल्टर समारोह बस, एक फिल्टर के माध्यम से अपने वर्तमान चयन चलाता है जो कुछ भी मेल नहीं खाता हटा दिए गये। इसमें दो अलग-अलग रूप हैं: एक जहां आप एक नियमित jQuery क्वेरी पास करते हैं, जैसे मैंने ऊपर किया था, और दूसरा जहां आप फ़िल्टर करने के लिए फ़ंक्शन को परिभाषित कर सकते हैं। अगर फ़ंक्शन गलत लौटाता है, तो वह तत्व हटा दिया जाता है।

इस मामले में क्वेरी जो कुछ भी (:not) नहीं है (:has) वर्ग के साथ एक बच्चे "चयनित" को हटा (.selected)। मैंने .selected चयनकर्ता का उपयोग यहां किया क्योंकि यह वर्तमान में खुले पैनल में accordion जोड़ता है।

यदि आपके पास केवल एक accordion था, या आपने अपने प्रत्येक accordions को क्लास नाम जैसे किसी प्रकार का पहचानकर्ता दिया, तो आप पूरी स्क्रिप्ट को बहुत कम कर सकते हैं। आइए मान लें कि प्रत्येक तत्व के लिए आप एक accordion में बदलना चाहते हैं, आप इसे कक्षा "समझौते" देते हैं।

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

यह, और अधिक सुपाठ्य और पोषणीय है के बाद से आप आसानी से भविष्य में और अधिक accordions जोड़ सकते हैं यदि आप चाहें तो और इस यह संभाल लेंगे।

फिल्टर के लिए प्रलेखन यहाँ है: http://docs.jquery.com/Traversing/filter

+0

वाह! यह बिल्कुल सही है!क्या आप मुझे कोड की फाइल लाइन की व्याख्या कर सकते हैं? यह बहुत अच्छा काम करता है, लेकिन मैं वास्तव में समझना चाहता हूं कि यह भविष्य के संदर्भ के लिए क्या कर रहा है (मैं jquery के लिए नया हूं)। आपकी सहायताके लिए धन्यवाद! जॉन – Jon

+0

ग्रेट स्पष्टीकरण! भविष्य में यह एक बड़ी मदद होगी। – Jon

+0

निक - महान स्पष्टीकरण! मैंने पहले इस तरह नेस्टेड फिल्टर नहीं देखा है। बहुत निर्देशक –

0

मैं एक ही मुद्दा था और कुछ शॉर्ट कोड JQuery के प्रत्येक() फ़ंक्शन का लाभ मद [0] तो सामान्य नेविगेशन कर सकते हैं करने के लिए ध्यान देने के सेट करते समय पतन के साथ यह सुलझाया है बायोडाटा।

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

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

धन्यवाद इसके काम ठीक है। –

संबंधित मुद्दे