2011-04-30 10 views
5

मैंने अपना टेस्ट कोड jsfiddle पर रखा है। कृपया इसे जांचें herejQuery फॉर्म सत्यापन: दो बार क्यों मान्य है?

जब मैं सबमिट बटन दबाता हूं तो मुझे दो बार चेतावनी संदेश क्यों मिलता है?

+0

यह मेरे लिए एक समस्या की तरह प्रतीत नहीं होता है। आपको केवल आवश्यक डेटा दर्ज करने और मान्य होने की आवश्यकता के अलावा आवश्यक फ़ंक्शन में कुछ भी नहीं करना चाहिए। आप नहीं जानते कि इसे कितनी बार बुलाया जा रहा है। – AndrewR

+0

@AndrewR मैं बहुत सशर्त सत्यापन कर रहा हूं, इसलिए चिंता करने की आवश्यकता है कि कैसे आवश्यक फ़ंक्शन को कॉल किया जाना चाहिए ... – Vikas

+0

क्या आप वास्तव में डेटा या कुछ और बदल रहे हैं जो दूसरे सत्यापन को विफल होने का कारण बन सकता है यदि इसे एक से अधिक बार बुलाया जा रहा है ? – AndrewR

उत्तर

0

जहाँ तक मैं कह सकता हूं, ऐसा इसलिए है क्योंकि आपके पास "सबमिट" प्रकार का एक बटन है। इसलिए, jQuery सत्यापन दो बार चल रहा है; एक बार जब टेक्स्ट इनपुट फोकस खो देता है, और फिर पृष्ठ को फिर से लोड किया जाता है। अगर मैं गलत हूं, तो मुझे उम्मीद है कि कोई मुझे सुधारता है, लेकिन जब मैंने "बटन" टाइप करने के लिए बटन बदल दिया तो डबल अलर्ट दूर जाना प्रतीत होता है।

एचटीएच।

संपादित करें: ठीक है, ऐसा लगता है कि मैं गलत था, इसलिए ऊपर दी गई सलाह को अनदेखा करें। मैं जिस ब्राउजर का उपयोग कर रहा था उसका एक अस्थायी क्विर्क होना चाहिए।

+1

बटन को सबमिट करने के प्रकार को बदलने पर मुझे यह काम नहीं मिला –

+0

क्या आपने अपना कैश साफ़ किया था? आप अपनी जावास्क्रिप्ट के कैश किए गए संस्करण के साथ काम कर रहे हैं। –

+0

@ माहेश सही है, अगर मैं form.valid() विधि को कॉल करता हूं, तो फिर यह दो बार अलर्ट करता है। – Vikas

4

आप मान्य कार्य का दुरुपयोग कर रहे हैं और एंड्रयूआर के रूप में उलझा हुआ है। ऐसी कई चीजें हैं जो बदलती हैं कि सत्यापन फ़ंक्शन को कितनी बार बुलाया जाता है। अपने उदाहरण में, "नियम" (आपके मामले में एक समारोह है जो) पर बुलाया जा रहा है:

  • टेक्स्ट 1 फोकस (यदि मूल्य बदल गया है) खो देता है
  • सबमिट बटन पर क्लिक किया
  • प्रपत्र प्रस्तुत
  • फॉर्म लोड

यह सही है क्योंकि अच्छी मान्यता आपको उस फ़ील्ड पर त्रुटियों को दिखाएगी जब आप इसे संपादित करते समय संपादित करेंगे और साथ ही कई अन्य घटनाएं भी करेंगे।

यदि आप किसी विशिष्ट फ़ील्ड के सत्यापन पर कार्यक्षमता निष्पादित करना चाहते हैं, तो क्षेत्र में अपनी कस्टम विधियों को चलाने के लिए ऑनवालिडेटिंग कॉलबैक जोड़ने का बेहतर अभ्यास है। नियम केवल नियम होना चाहिए और विधियों नहीं, यही कॉलबैक हैं (और हां, कॉलबैक को कई बार निष्पादित किया जाएगा क्योंकि कई घटनाएं वैध विधि को आग लगती हैं)।

तुम सच में यह सिर्फ एक बार ही फार्म पर आग और प्रस्तुत करने की आवश्यकता है, तो डिफ़ॉल्ट सत्यापन व्यवहार को निष्क्रिय और एक मैनुअल सत्यापित करें जोड़ने() निम्नलिखित की तरह फोन:

$("#test1").submit(function() { 
    $("#test1").validate(); 
}); 

क्षण में बाहर फ्लैट, लेकिन अगर आप इसकी ज़रूरत है तो मैं वापस पॉप कर सकता हूं और इसका एक उदाहरण प्रदान कर सकता हूं।

पीएस: डबल इवेंट फायरिंग पाने का एक और प्रसिद्ध तरीका दो बार एक ईवेंट बाध्यकारी है। यदि आप सुनिश्चित नहीं हैं कि पृष्ठों को कैसे शुरू किया जाएगा, तो इसे बाध्य करने से पहले एक ईवेंट को "अनबिंड" करना अक्सर सुरक्षित होता है। यह निश्चित रूप से आपके मामले में समस्या नहीं है, लेकिन यह आपकी समस्या को ठीक करने का प्रयास कर सकता है और भ्रम पैदा कर सकता है - यह मेरे लिए अतीत में है :)

1

यह कोई जवाब नहीं है, यह एक कामकाज है ।

क्योंकि यह पहला परिणाम है जो Google में आया था, मैं इसे पोस्ट करने जा रहा हूं, भले ही आपको शायद अब उत्तर की परवाह न हो।

मैं भी jQuery और jQuery सत्यापन प्लगइन का उपयोग कर रहा हूँ। मैं अपने नियमों में से एक में अजाक्स कोड का थोड़ा सा भाग रहा था और, मैं अजाक्स नौसिखिया होने के नाते, एक चेतावनी में डाल दिया ताकि मैं देख सकूं कि हुड के नीचे क्या चल रहा था।

अलर्ट दो बार निकाल दिया गया, जो एक समस्या थी क्योंकि यह वास्तव में दो बार यातायात की ज़रूरत है। तो मैंने एक कारण/समाधान के लिए इंटरनेट पर चारों ओर घूमना शुरू कर दिया। मुझे पता था कि मैं ऑनफोकसआउट सत्यापन रखना चाहता था, इसलिए मैंने इसे यथासंभव लंबे समय तक अक्षम कर दिया।

जब मैंने आखिरकार इसे सहेजा और अक्षम कर दिया, तो मैंने जो कुछ सीखा। ऑनफोकसआउट को अक्षम करना वास्तव में सुविधा को अक्षम नहीं करता है, लेकिन यह इसे दो बार फायरिंग से रोकता है। इस के साथ मेरी सत्यापन कोड ...

$("#FORMNAME").validate({ 
    onkeyup: false, 
    onfocusout: false, 

... शुरू वास्तव में के बाद मैं सबमिट बटन पर पहली बार है, जो वास्तविक है मैं चाहता था क्लिक किया था शुरू होने से ही मान्यता नहीं रोका; क्लिक करें, समस्याएं देखें, समस्याओं को ठीक करें और उपयोगकर्ता टैब या क्लिक होने पर उन्हें अपडेट करें। वह अभी भी खूबसूरती से काम करता है, और अतिरिक्त अलर्ट गायब हो गए।

मुझे यह जानना अच्छा लगेगा कि वहां क्या हो रहा था, लेकिन मुझे यह देखने में खुशी हुई। संभवतः, ऑनफोकसआउट सत्यापन में कुछ jQuery सत्यापन के सामान्य पोस्ट-सबमिट-बटन व्यवहार के साथ विवाद कर रहा था और दो बार आग लगने का सत्यापन कर रहा था।

(हाँ, यह जानकारी शायद दस्तावेज में है, लेकिन कहीं और अपने RTFM टिप्पणी निर्देशित करने के लिए कृपया संकोच न करें।)

tldr: onkeyup अक्षम करें और onfocusout, और किसी भी अलर्ट केवल एक बार सक्रिय होगा। आप उतनी कार्यक्षमता खो देंगे जितना आप उम्मीद करेंगे।

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