2009-11-25 23 views
8

मैं JQuery के accordion module का उपयोग कर एक फॉर्म विज़ार्ड लिख रहा हूं। समस्या यह है कि मैं accordion मेनू पर किसी भी माउस क्लिक को ओवरराइड करना चाहता हूं ताकि accordion अगले अनुभाग को दिखाए जाने से पहले फ़ॉर्म को पहले सत्यापित किया जा सके।JQuery accordion - अनइंड क्लिक इवेंट

$('#accordion h3').unbind(); 

$('#accordion h3').click(function() { 
    if (validate()) 
    { 
    $("#accordion").accordion('activate', 2); 
    }else 
    { 
    alert("invalid form"); 
    } 
} 

लेकिन इसके बाद के संस्करण कोड काम नहीं करता:

मैं निम्नलिखित की कोशिश की है। Accordion की अंतर्निहित क्लिक घटना अभी भी कॉल हो जाती है और accordion अगले खंड को दिखाता है चाहे यह फ़ॉर्म वैध है या नहीं।

$('#accordion h3').click(function(event) { 
    if (validate()) 
    { 
    $("#accordion").accordion('activate', 2); 
    }else 
    { 
    alert("invalid form"); 
    }   
    event.stopPropagation(); 
}); 

लेकिन stopPropagation() कॉल बिल्कुल अकॉर्डियन व्यवहार को प्रभावित प्रतीत नहीं होता है, तो अगले अनुभाग या नहीं, विधि मान्य प्रदर्शित होता है:

मैं भी निम्न कोड की कोशिश की है।

कोई विचार क्या मैं गलत कर रहा हूं?

धन्यवाद!

उत्तर

13

ठीक है, इस समारोह को कोड करने से ब्रेक लिया और आंखों की एक नई जोड़ी के साथ वापस आ गया है।

$("#accordion").accordion({event: false}); 

जोड़ा जा रहा है घटना: डिफ़ॉल्ट क्रिया को क्रियान्वित करने से अकॉर्डियन मेनू पर माउस क्लिक कर पाएगा अकॉर्डियन intitialization कोड को झूठा और फिर मैं कस्टम लिख सकते हैं सत्यापित करें() फ़ंक्शन जब चलाने के लिए कोड से निपटने के लिए क्लिक करें यहाँ समाधान है उपयोगकर्ता मेनू पर क्लिक करता है, अनिवार्य रूप से एग्रीजन के अंतर्निर्मित क्लिक फ़ंक्शन को ओवरराइड करता है यदि फ़ॉर्म सत्यापन जांच में विफल रहता है।

बीटीडब्ल्यू, मैं यहां JQuery UI के accordion मॉड्यूल का उपयोग कर रहा हूं। ie7,8, क्रोम 19 के साथ

काम करता है, एफएफ 3.0.3

+0

मिल जाए तो मुझे कोई समाधान पोस्ट होगा। मुझे आपके द्वारा की गई वही समस्या है। आप अगले accordion पैनल में कैसे जा रहे हैं? –

0

event.stopPropogation() इवेंट लक्ष्य के साथ पंजीकृत ईवेंट हैंडलर को कॉल करने से रोकता नहीं है, तो यह event.bubbles सत्य होने पर घटना को डीओएम को बुलबुले करने से रोकता है। आप इवेंट हैंडलर false पर लौटने या event.preventDefault() पर कॉल करने का प्रयास कर सकते हैं, अधिक जानकारी के लिए here या here देखें।

+0

धन्यवाद, लेकिन मैं preventDefault का मानना ​​है() केवल उस तत्व के डिफ़ॉल्ट व्यवहार को रोकता है जिसके साथ मैं बातचीत कर रहा हूं - उदाहरण के लिए, किसी लिंक पर preventDefault() ब्राउज़र को एक नया पृष्ठ लोड करने से रोक देगा, और किसी फॉर्म पर रोकथाम() को फ़ॉर्म को सबमिट करने से रोकता है। accordion कोड के साथ, मैं एक डिफ़ॉल्ट कार्रवाई को होने से रोकने की कोशिश नहीं कर रहा हूं, मैं एग्रीजन कोड में लिखित एक अनुकूलित क्रिया को रोकने से रोकने की कोशिश कर रहा हूं। सुझाव के लिए धन्यवाद, लेकिन रोकें डीफॉल्ट और 'झूठी वापसी' समस्या को हल नहीं करती –

0

स्रोत कोड से निर्णय लेना, घटना एच 3 के लिए बाध्य नहीं है, लेकिन आस-पास के कंटेनर (प्लगइन ईवेंट प्रतिनिधिमंडल का उपयोग करता है)। इसके अलावा, हैंडलर click से बाध्य नहीं है, लेकिन click.ui-accordion पर है। तो कोशिश करें:

$('#accordion').unbind('click.ui-accordion'); 

और केवल रिकॉर्ड के लिए: "JQuery के accordion मॉड्यूल" जैसी कोई चीज़ नहीं है (कम से कम अभी तक नहीं)। JQuery के लिए केवल कई accordion प्लगइन्स हैं।

+0

धन्यवाद, मैंने $ ('# accordion') की कोशिश की। Unbind(); इससे पहले, लेकिन इसने समस्या को हल नहीं किया। मुझे लगता है कि समस्या यह है कि घटना किस तत्व से जुड़ी हुई है, लेकिन मैंने accordion में हर तत्व को बहुत अधिक बाध्य करने का प्रयास किया है, लेकिन क्लिक अभी भी पता चला है और कोड अभी भी निष्पादित है। –

+0

क्या आपने '$ ('# accordion') की कोशिश की है। अनबिंड ('क्लिक करें')' या '$ ('# accordion')। Unbind ('click.ui-accordion')'? इसमे अंतर है। '$ (' # Accordion h3 ') भी कोशिश करें। अनबिंड (' click.ui-accordion ') '। यह आपके द्वारा उपयोग किए जा रहे संस्करण पर निर्भर करता है। –

+0

अजीब, लेकिन मैंने accordion के अंदर सभी तत्वों को अनबाइंड करने का प्रयास किया है और क्लिक अभी भी JQuery द्वारा पंजीकृत हो जाता है। मैंने निम्नलिखित सभी कोडों का प्रयास किया है: $ ('# accordion')। Unbind ('click.ui-accordion'); $ ('# accordion')। Unbind ('क्लिक करें'); $ ('# accordion h3')। Unbind ('click.ui-accordion'); $ ('# accordion h3')। Unbind ('क्लिक करें'); $ ('# accordion div')। Unbind ('click.ui-accordion'); $ ('# accordion div')। Unbind ('क्लिक करें'); $ ('# accordion div p')। Unbind ('click.ui-accordion'); $ ('# accordion div p')। Unbind ('क्लिक करें'); लेकिन कोई फायदा नहीं हुआ ... इस पर काम करना जारी रखेगा और अगर मुझे कोई –

0

आप नीचे दिए गए कोड तैयार समारोह के तल पर एक साथ लिखने के लिए है:

$('#accordion h3').unbind('click'); 
$('#accordion a').unbind('click'); 
संबंधित मुद्दे