2010-12-22 16 views
5

को रोकना होगा, मुझे एक फॉर्म से जुड़े ईवेंट हैंडलर हैं। अगर कोई शर्त पूरी नहीं होती है तो आग लगने वाले पहले व्यक्ति को अन्य घटना को रोकना चाहिए।दो फॉर्म पर ईवेंट हैंडलर सबमिट करें। किसी को अन्य

नीचे दिया गया कोड काम नहीं करता है, क्योंकि दोनों घटनाएं ट्रिगर हो जाएंगी। क्या आप मेरी मदद कर सकते हैं?

धन्यवाद!

//fires first 
$("#myform").submit(function(){ 
    if (some validation) { 
    alert("You need to make the form valid"); 
    return false; 
    } 
}); 
//fires second 
$("#myform").submit(function(){ 
    //ajax stuff 
    return false; 
}); 

पेज। मुझे यह करना है क्योंकि AJAX सामान एक प्लगइन में है जो परिवर्तनीय नहीं है। मैं टाल नहीं सकते दो ईवेंट हैंडलर्स

उत्तर

7

event.stopImmediatePropagation() पर एक नज़र डालें:

निष्पादित किया जा रहा से संचालकों के बाकी रहता है और डोम पेड़ खलबली मचाने वाले से घटना को रोकता है।

$("#myform").submit(function(event){ 
    if (some validation) { 
    event.stopImmediatePropagation(); 
    alert("You need to make the form valid"); 
    return false; 
    } 
}); 

तुम भी event.preventDefault() उपयोग करने के लिए चाहते हो सकता है।

अद्यतन: बस स्पष्ट करने के लिए: आप ईवेंट हैंडलर कहने वाले आदेश पर भरोसा कर सकते हैं। JQuery की bind विधि से:

जब कोई ईवेंट किसी तत्व तक पहुंच जाता है, तो तत्व के लिए उस ईवेंट प्रकार से जुड़े सभी हैंडलर निकाल दिए जाते हैं। यदि कई हैंडलर पंजीकृत हैं, तो वे हमेशा उस क्रम में निष्पादित करेंगे जिसमें वे बाध्य थे। सभी हैंडलर निष्पादित करने के बाद, घटना सामान्य घटना प्रसार पथ के साथ जारी है।

आदेश W3C की मूल परिभाषा में परिभाषित नहीं किया जा सकता है लेकिन यह jQuery के साथ काम करता है। अन्यथा, उपरोक्त नामित फ़ंक्शन वैसे भी अनावश्यक होगा;)

+0

आप कैसे पता लगाते हैं कि इस ईवेंट हैंडलर को पहले बुलाया जाएगा? – jrharshath

+0

@ यहां भेड़िये हो: ईवेंट हैंडलर को उस तत्व में बुलाया जाएगा जो वे तत्व से जुड़े हुए हैं। –

+0

आईएमओ, इवेंट हैंडलर के * ऑर्डर * के आधार पर एक * बहुत * बुरा विचार है। – jrharshath

2

संक्षेप में, नहीं। यदि आपके पास दो ईवेंट हैंडलर हैं, तो आपके पास दो ईवेंट हैंडलर हैं। हालांकि, इसके आसपास के तरीके हैं।

सबसे पहले, याद रखें कि जावास्क्रिप्ट निष्पादन एकल-थ्रेडेड है। यदि आप वैश्विक चर परिभाषित करते हैं, तो var haveCalledSubmit=0; कहें, तो आप अपने हैंडलर को सिंक करने के लिए इसका उपयोग कर सकते हैं। उदाहरण के लिए, आप इस के साथ प्रत्येक हैंडलर समारोह शुरू करता है, तो:

if(haveCalledSubmit == 1)return haveCalledSubmit = 0; 
else haveCalledSubmit = 1; 

तब केवल दो संचालकों में से एक कहा जाएगा। आप कुछ शर्त से मेल खाने के लिए या दो से अधिक कार्यों से निपटने के लिए इसे आसानी से संशोधित कर सकते हैं।

इवेंट प्रचार मॉडल को देखने का एक विकल्प है। This page आपको आवश्यक सभी जानकारी देगा, हालांकि फ़ेलिक्स ने पहले से ही एक AJAX कमांड का उल्लेख किया है जो आप चाहते हैं जो कर सकता है।

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