2013-01-18 9 views
5

मैं अपने सभी फ़ॉर्म सत्यापन के लिए बहुत अच्छा है bassistance सत्यापन प्लगइन का उपयोग कर रहा जरूरत: http://bassistance.de/jquery-plugins/jquery-plugin-validation/jQuery मान्य है, लेकिन केवल प्रारंभिक जमा करने के बाद

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

प्रलेखन here में, एक समाधान onkeyup से false पर सेट करना है जिससे त्रुटि संदेश केवल ऑनब्लर दिखाई देते हैं।

हालांकि, में मेरे सेटअप, मैं दो अतिरिक्त समस्या (ऊपर समाधान द्वारा हल नहीं)

  1. जब उन्हें
  2. जब सही करने मुठभेड़ गलत पर्चे को जमा करने पर, त्रुटि संदेश साफ नहीं कर रहे हैं ब्राउज़र ऑटोफिल फ़ंक्शन का उपयोग किया जाता है, स्वचालित रूप से फ़ील्ड भरने के लिए गलत के रूप में चिह्नित किया जाता है।

तो, मेरा प्रारंभिक प्रश्न था: मैं पहले सबमिट के बाद केवल बासिस्टेंस सत्यापन आग कैसे बना सकता हूं और वहां से इसकी डिफ़ॉल्ट सेटिंग्स के साथ कैसे कर सकता हूं?

if($('#contact_form').length) { 
    $("#contact_form").validate({ 
     rules: { 
      first_name: { 
       required: true 
      }, 
      last_name: { 
       required: true 
      }, 
      message: { 
       required: true 
      }, 
      telephone: { 
       required: true 
      },    
      email: { 
       required: true, 
       email: true 
      }, 
      email_again: { 
       required: true, 
       email: true, 
       equalTo: "#email" 
      }, 
      norobot: { 
       required:true, 
       minlength:4, 
       maxlength:4, 
       number:true  
      } 
     } 
    }); 
} 

कृपया पूर्ण जावास्क्रिप्ट यहाँ मिल: http://lad.chocolata.be/nl/contact

प्रपत्र जमा करने के बाद: http://lad.chocolata.be/js/main.js

यहाँ बग के साथ एक काम कर उदाहरण onkeyup सेट false के साथ है

यहाँ मेरी कोड है कुछ अमान्य फ़ील्ड के साथ, त्रुटि संदेश उन्हें सही करने पर स्पष्ट नहीं होते हैं।

मुझे क्या याद आ रही है?

+0

कृपया मूल कोडिंग के भीतर अपना कोड शामिल करें ताकि हम इसे फिर से खोला जा सकें। – Sparky

+0

हाय, मैं नम्रता से अपने प्रश्न को बंद करने से असहमत हूं। यहां पूरी तरह से पोस्ट करने के लिए कोड बहुत बड़ा है, इसलिए मैंने दोनों उदाहरणों के लिंक शामिल किए हैं। मैंने JSFiddle में इस व्यवहार को पुन: उत्पन्न करने का प्रयास किया है, लेकिन नहीं कर सकता। मुझे लगता है कि मेरी कुछ स्क्रिप्ट के बीच एक संघर्ष है। क्या आप कृपया प्रदान किए गए लिंक पर एक नज़र डालेंगे? कुछ भी भरने के बिना फॉर्म जमा करने का प्रयास करें, फिर फ़ील्ड को सही करें: आप देखेंगे कि त्रुटियां साफ़ नहीं की गई हैं। इस बीच, मैं इस प्रश्न को और अधिक स्पष्ट होने के लिए फिर से लिखूंगा। – maartenmachiels

+0

इस साइट के पूरे विचार में भविष्य के पाठकों की सहायता भी शामिल है, जो तब नहीं हो सकते जब बाहरी लिंक मर जाएंगे। संक्षिप्त उदाहरण बनाने के लिए आप जो कुछ भी कर सकते हैं वह इसे फिर से खोलने की दिशा में महत्वपूर्ण होगा। यहां तक ​​कि बस अपना सरल जेएसफ़ील्ड लेना और इसे अपने दो मामलों में विभाजित करना बेहतर होगा। – Sparky

उत्तर

4

उद्धरण ओपी:"तो, सादा और सरल, मेरे सवाल है: कैसे मैं पहली बार प्रस्तुत करने के बाद ही और इसे बाहर पर वहाँ से डिफ़ॉल्ट सेटिंग्स के साथ Bassistance सत्यापन आग कर सकते हैं"

पाठक के लिए चेतावनी: आम तौर पर, एक डोम पर .validate()एक बार फोन प्रपत्र को प्रारंभ करने के लिए तैयार हैं। नीचे दिया गया कोड केवल .validate()एक बार पर सबमिट करता है जब सबमिट बटन प्रारंभ में दबाया जाता है ... इसलिए, सत्यापन तब तक होगा जब तक कि उस बटन को पहली बार दबाया न जाए।

.validate() को एक से अधिक बार कॉल करने की आवश्यकता नहीं है, इसलिए मैंने jQuery one() event का उपयोग किया।

$(document).ready(function() { 

    $('#submit').one('click', function() { 
     $('#myform').validate({ 
      // your rules & options 
     }); 
    }); 

}); 

कार्य डेमो:

http://jsfiddle.net/hSDyP/

+0

उत्कृष्ट जवाब, स्पार्की। एक प्रश्न: मैंने सबमिट बटन पर क्लिक करने का प्रयास किया है, और एंटर दबाकर कोशिश की है: दोनों मामले काम करते हैं। क्या हमारे पास तब तक मौजूद सभी संभावित स्थितियां हैं? या घटना हैंडलर को सबमिट करने के लिए बेहतर होगा? – maartenmachiels

+0

@ मार्टनमैचियल्स, मान लीजिए जेएस सक्षम है, तो मैं कहूंगा "हां", आप ढके हुए हैं। मैं 'सबमिट' ईवेंट का उपयोग करने वाली किसी भी चीज़ से बचूंगा क्योंकि यह प्लगइन के अपने 'submitHandler' द्वारा पहले ही संभाला जा चुका है। दूसरे शब्दों में, आप वास्तव में उस बिंदु पर वास्तव में 'सबमिट' नहीं कर रहे हैं, इसलिए उस ईवेंट का उपयोग करने का कोई कारण नहीं है। – Sparky

+0

विजेता यह सब लेता है :-) आपके उत्कृष्ट योगदान के लिए धन्यवाद। बहुत सराहना की! – maartenmachiels

-1

मैं एक सामान्य समाधान लिखा valitation लागू करने के लिए जब तक पहले सबमिट होता है से बचने के लिए। बस अपनी स्क्रिप्ट को जोड़ने के बाद इस कोड का उपयोग 'jquery.validate.js':

(function($){ 

var _validate = $.fn.validate; 

$.fn.validate = function(){ 
    var result, args = Array.prototype.slice.apply(arguments); 
    this.each(function(){ 
     var $this = $(this), 
      lazyValidate = $this.data('lazy-validate'); 
     // Lazy validation has been initialized: just delegate 
     if(lazyValidate === true){ 
      result = _validate.apply($this, args); 
      return; 
     } 
     // Init, if not yet 
     if(!lazyValidate){ 
      // Create Lazy Form 
      lazyValidate = $('<form />')[0]; 
      $this.data('lazy-validate', lazyValidate); 
      // Add One-Time submit handlder 
      $this.one('submit.lazy-validate', function(){ 
       var $this = $(this); 
       // Apply validation options now 
       _validate.call($this, $(lazyValidate).data('validator').settings); 
       // Mark lazy validation has initialized 
       $this.data('lazy-validate', true); 
       // Test Valid 
       return $this.valid(); 
      }); 
     } 
     // Apply Method to Lazy Form 
     result = _validate.apply($(lazyValidate), args); 
    }); 
    return result === undefined ? this : result;   
}; 

})(jQuery); 

ध्यान रखें कि समाधान यदि आप क्षेत्र के तरीकों का उपयोग कर रहे हैं काम नहीं होगा:) नियम (, removeAttrs()।

अंत में, मुझे लगता है कि यह कार्यक्षमता वैल्यूशन प्लगइन में एक साधारण मान्य() विकल्प के रूप में शामिल की जानी चाहिए; लेकिन तब तक मैं अभी भी इस चाल का उपयोग करूँगा।

+0

यह सुंदर वर्बोज़, आईएमओ है। स्वीकार्य उत्तर पर क्या फायदा है? – Sparky

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