jQuery मान्य - छिपे हुए फ़ील्ड के लिए सत्यापन सक्षम करें


186

छिपे हुए क्षेत्रों के डिफ़ॉल्ट सत्यापन द्वारा jQuery सत्यापन प्लगइन 1.9 के नए संस्करण में नजरअंदाज कर दिया गया । मैं textarea इनपुट क्षेत्र के लिए CKEditor का उपयोग कर रहा हूं और यह फ़ील्ड को छुपाता है और इसे iframe से प्रतिस्थापित करता है। क्षेत्र है, लेकिन छिपे हुए क्षेत्रों के लिए सत्यापन अक्षम है। सत्यापन प्लगइन संस्करण 1.8.1 के साथ सब कुछ उम्मीद के मुताबिक काम करता है।

तो मेरा सवाल है कि v1.9 सत्यापन प्लगइन के साथ छिपे हुए क्षेत्रों के लिए सत्यापन कैसे सक्षम किया जाए।

यह सेटिंग काम नहीं करती है:

$.validator.setDefaults({ ignore: '' });

1
यह भी देखें stackoverflow.com/questions/7952181/...
goodeye

"छिपे हुए क्षेत्रों की पुष्टि" के लिए लिंक मर चुका है।
बीपये

मान्यकरण मेरे साथ डिफ़ॉल्ट रूप से काम कर रहा है <input type="text" name="myfield" id="myfield" required="required" style="display: none;">। मुझे कोई सेटिंग बदलने या कुछ विशेष करने की ज़रूरत नहीं थी।
चौकोरंडी

जवाबों:


329

प्लगइन का लेखक कहता है कि आपको "उद्धरण के बिना वर्ग कोष्ठक" का उपयोग करना चाहिए ,[]

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

रिलीज़: सत्यापन प्लगिन 1.9.0: "... एक अन्य परिवर्तन को छिपे हुए तत्वों के साथ रूपों का सेटअप आसान बनाना चाहिए, इन्हें अब डिफ़ॉल्ट रूप से अनदेखा किया जाता है (विकल्प" अनदेखा "में": छिपा हुआ "अब डिफ़ॉल्ट रूप में है) सिद्धांत रूप में, यह एक मौजूदा सेटअप को तोड़ सकता है। यह वास्तव में करता है कि अप्रत्याशित स्थिति में, आप "[]" (उद्धरण चिह्नों के बिना वर्ग कोष्ठक) को अनदेखा-विकल्प सेट करके इसे ठीक कर सकते हैं।

सभी रूपों के लिए इस सेटिंग को बदलने के लिए:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});

(यह आवश्यक नहीं है कि फ़ंक्शन के .setDefaults()भीतर हो document.ready)

या एक विशिष्ट फॉर्म के लिए:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

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

कुछ छिपे हुए फ़ील्ड पर सत्यापन सक्षम करने के लिए यह उत्तर देखें, लेकिन फिर भी दूसरों को अनदेखा करें।


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

टिप्पणियों को छोड़ने से पहले कि "यह काम नहीं करता है" , ध्यान रखें कि ओपी केवल jQuery मान्य प्लगइन के बारे में पूछ रहा है और उसके सवाल का ASP.NET, MVC या किसी अन्य Microsoft ढांचे से कोई लेना- देना नहीं है, इस प्लगइन के सामान्य को बदल सकता है अपेक्षित् व्यवहार। यदि आप Microsoft फ्रेमवर्क का उपयोग कर रहे हैं, तो jQuery Validate प्लगइन का डिफ़ॉल्ट कामकाज Microsoft के unobtrusive-validationप्लगइन द्वारा लिखा गया है ।

यदि आप unobtrusive-validationप्लगइन से संघर्ष कर रहे हैं , तो कृपया इस उत्तर को देखें: https://stackoverflow.com/a/11053251/594235


26
शायद नीचे का मतदाता मुझे कुछ रचनात्मक प्रतिक्रिया दे सकता है। अन्यथा, उत्तर पूरी तरह से स्व-निहित है, ठीक से sourced है, कोड उदाहरण देता है, और प्लगइन के लेखक के अनुसार तकनीकी रूप से सही है।
स्पार्की

1
@StijnVanBael, नहीं, यह गलत है। देखें: jsfiddle.net/F4w92/1 और जरिक के उत्तर पर मेरी दूसरी टिप्पणी भी देखें ।
स्पार्कली

4
अच्छी तरह से @Sparky कहा। डाउन-वोट शायद एक तरह का बदला है, मैंने उसी का सामना किया है ..
उमर

1
JSFiddle अब काम नहीं करता है क्योंकि HTTPS के बजाय HTTP में पुस्तकालय लोड किए जाते हैं। अपडेट किया गया संस्करण: jsfiddle.net/F4w92/31
हॉटपिक्स

1
मैंने यह भी अस्वीकार कर दिया है क्योंकि यह मेरे लिए नवीनतम संस्करण का उपयोग करके काम नहीं करता है, का उपयोग करना था: $ ("फ़ॉर्म")। डेटा ("सत्यापनकर्ता")। settings.ignore = ""; @ जैम्स बोले से अन्य उत्तर के रूप में
मार्क होमर

72

मेरे लिए यह एक ASP.NET MVC3 साइट के भीतर काम करता है, जहाँ मैंने फ्रेमवर्क को विनीत सत्यापन के लिए सेटअप करने के लिए छोड़ दिया है, अगर यह किसी के लिए उपयोगी है:

$("form").data("validator").settings.ignore = "";

2
मुझे यह भी पसंद है क्योंकि इसका मतलब है कि मैं इसे डिफ़ॉल्ट परिस्थितियों को बदलने के बजाय कुछ परिस्थितियों में कर सकता हूं।
स्टीव ओवेन

5
मुझे इसे इस तरह करना था, क्योंकि विकल्प बदलने के लिए .validate () का उपयोग करना काम नहीं कर रहा था।
फ़रिना

1
यह विनीत मान्यता के लिए सही समाधान है, मैंने अन्य सभी समाधानों की कोशिश की, वे विनीत का उपयोग नहीं करने की स्थिति में काम कर सकते हैं। यदि आप विनीत का उपयोग कर रहे हैं तो यहां सही जगह है।
हकन फिक्याक

इस विधि का उपयोग बूटस्ट्रैप
अकॉर्डियन के

जब मैं इसे इस रूप में बदलता हूं तो फॉर्म मान्य नहीं होता है। मैं
ऑफिर पीर

64

लगाना सुनिश्चित करें

 $.validator.setDefaults({ ignore: '' });

अंदर नहीं है$(document).ready


2
बहुत बढ़िया जवाब। प्रलेखन के लिए एक लिंक लोगों को सीखने के लिए अच्छा है, लेकिन एक सीधा उत्तर अधिक मूल्यवान है। वह ओपी सही रास्ते पर था, लेकिन इसे $ (दस्तावेज़) के बाहर रखना पहले से ही चाल है।
केविन जिक

3
@KevinZych, जाहिर है, यह बिल्कुल कोई फर्क नहीं पड़ता कि क्या $.validator.setDefaults()डोम तैयार हैंडर के अंदर या बाहर रखा गया है। इस jsField की तुलना इस jsField से करें
स्पार्कली

दिलचस्प @Sparky, आपके fiddles उत्कृष्ट सबूत हैं। मुझे वापस जाना होगा और इस समाधान का उपयोग करके मेरे द्वारा तय किए गए कोड को देखना होगा और पता लगाना होगा कि मैं इस नतीजे पर क्यों पहुंचा कि उसे DOM तैयार हैंडलर के अंदर होना था। कोई और कारण रहा होगा।
केविन ज़िक

जस्टिन बताते हैं कि डॉक रेडी के अंदर दौड़ने से समस्याएं क्यों होती हैं। हालाँकि, यह उत्तर एक अच्छा विकल्प नहीं है क्योंकि यह गारंटी देना कठिन है कि डॉक तैयार के बाहर कुछ पहले से तैयार डॉक तैयार होगा। डॉक। पहले से ही इसके बाहर की स्क्रिप्ट का इंतजार नहीं करेगा। व्यक्तिगत कुछ भी नहीं, लेकिन यह एक विश्वसनीय जवाब नहीं है।
एरोनल्स

अंत में मेरे पास एक
उत्तर है..धन्यवाद

29

इसलिए मैं थोड़ा गहराई में जा रहा हूं कि यह काम क्यों नहीं करता क्योंकि मैं उस तरह का व्यक्ति हूं जो रात को सोए बिना नहीं सो सकता। मैं jQuery के मान्य 1.10 और Microsoft jQuery के विनीत मान्य 2.0.20710.0 का उपयोग कर रहा हूं जो 1/29/2013 को प्रकाशित हुआ था।

मैंने jQuery Validate में setDefaults पद्धति की खोज करके शुरुआत की और इसे अनअमाइंड किए गए फ़ाइल की लाइन 261 पर पाया। यह सब कार्य वास्तव में आपकी json सेटिंग्स को मौजूदा में विलय कर देता है $.validator.defaultsजो कि इनिशियल प्रॉपर्टी के साथ ": छिपा हुआ" होने के साथ-साथ jQuery Validate में परिभाषित अन्य चूक के साथ शुरू होता है। तो इस बिंदु पर हमने अनदेखा कर दिया है। अब देखते हैं कि इस चूक संपत्ति को कहां संदर्भित किया जा रहा है।

जब मुझे कोड के माध्यम से पता चलता है कि कहां $.validator.defaultsसंदर्भित किया जा रहा है। मैंने देखा कि केवल एक फॉर्म वैलिडेटर के लिए कंस्ट्रक्टर द्वारा उपयोग किया जा रहा था, लाइन 170 में jQuery के वैमानिक फ़ाइल को मान्य करता है।

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

इस बिंदु पर एक सत्यापनकर्ता सेट की गई किसी भी डिफ़ॉल्ट सेटिंग्स को मर्ज कर देगा और इसे प्रपत्र सत्यापनकर्ता के साथ संलग्न करेगा। जब आप उस कोड को देखते हैं जो वैरिफाइंग, हाइलाइटिंग, अनहाइलाइटिंग आदि कर रहा है, तो वे सभी प्रॉपर्टी को इग्नोर करने के लिए validator.settings ऑब्जेक्ट का उपयोग करते हैं। इसलिए हमें यह सुनिश्चित करने की आवश्यकता है कि अगर हम सेटडफ़ॉल्ट्स पद्धति के साथ अनदेखी करना चाहते हैं तो यह $ ("फ़ॉर्म") से पहले घटित होना चाहिए। मान्य () कहा जाता है।

यदि आप Asp.net MVC और विनीत प्लगइन का उपयोग कर रहे हैं, तो आप जावास्क्रिप्ट को देखने के बाद महसूस करेंगे कि दस्तावेज़ को पहले से ही कहा जाता है। मैंने डॉक्यूमेंट में पहले से ही अपने सेटफॉल्ट को भी बुला लिया है। पहले से ही ब्लॉक है जो स्क्रिप्ट के बाद निष्पादित करने जा रहा है, jquery मान्य और विनीत है क्योंकि मैंने उन स्क्रिप्ट को html में परिभाषित किया है जो उसमें कॉल है। तो मेरे कॉल में स्पष्ट रूप से सत्यापन के दौरान छिपे हुए तत्वों को छोड़ने की डिफ़ॉल्ट कार्यक्षमता पर कोई प्रभाव नहीं था। यहां कुछ विकल्प हैं।

विकल्प 1 - आप के रूप में जुआन मेल्लाडो ने कहा कि दस्तावेज़ के बाहर कॉल हो सकती है। पहले से ही स्क्रिप्ट लोड होते ही निष्पादित हो जाएगी। मुझे इसके समय के बारे में निश्चित नहीं है क्योंकि ब्राउज़र अब समानांतर स्क्रिप्ट लोड करने में सक्षम हैं। अगर मैं सिर्फ सतर्क हूं तो कृपया मुझे सुधारें। इसके अलावा, शायद इसके आस-पास भी रास्ते हैं लेकिन मेरी जरूरतों के लिए मैं इस रास्ते पर नहीं गया।

विकल्प 2 ए - मेरी नज़र में सुरक्षित शर्त सिर्फ $.validator.setDefaults({ ignore: '' });दस्तावेज़ के अंदर की जगह है। पहले से ही घटना $("form").data("validator").settings.ignore = "";। यह अनदेखी की गई संपत्ति को संशोधित करेगा जो वास्तव में jQuery के द्वारा उपयोग किया जाता है जब दिए गए फॉर्म के लिए आपके तत्वों पर प्रत्येक सत्यापन करते हैं।

विकल्प 2 बी - कोड को थोड़ा और देखने के बाद आप $("form").validate().settings.ignore = "";प्रॉपर्टी को इग्नोर करने के तरीके के रूप में भी इस्तेमाल कर सकते हैं। कारण यह है कि जब वैध फ़ंक्शन को देखते हैं तो यह देखने के लिए जांचता है कि क्या $.data()फ़ंक्शन के माध्यम से फार्म तत्व के लिए पहले से ही एक मान्य ऑब्जेक्ट संग्रहीत किया गया है। यदि इसे फॉर्म एलिमेंट के साथ स्टोर की गई वैलिडेटर ऑब्जेक्ट मिल जाती है तो यह केवल एक और बनाने के बजाय वैधीटर ऑब्जेक्ट को वापस कर देती है।


विस्तृत उत्तर के लिए धन्यवाद!
davidallyoung

ओपी जवाब के रूप में अच्छा काम मेरे लिए MVC 5 में काम नहीं किया
मार्क होमर

आपके विश्लेषण ने मुझे मेरे सत्यापन मुद्दों को ठीक करने में बहुत मदद की। +1
pgcan

15

यह मेरे लिए एक ASP.NET साइट के भीतर काम करता है। कुछ छिपे हुए फ़ील्ड पर सत्यापन सक्षम करने के लिए इस कोड का उपयोग करें

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

फ़ॉर्म के सभी तत्वों के सत्यापन को सक्षम करने के लिए इसे उपयोग करें $("form").data("validator").settings.ignore = "";

ध्यान दें कि उनका उपयोग करें $(document).ready(function() { })


8

बस ignore: []विशिष्ट रूप के लिए विशिष्ट पृष्ठ में जोड़ा गया, इस समाधान ने मेरे लिए काम किया।

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });


0

सत्यापन फॉर्म सबमिट करने पर मेरे लिए काम कर रहा था, लेकिन यह चुने हुए चुनिंदा सूचियों के इनपुट पर प्रतिक्रियाशील घटना संचालित सत्यापन नहीं कर रहा था।

इसे ठीक करने के लिए मैंने लाइब्रेरी द्वारा जोड़े जाने वाले jquery सत्यापन घटना को मैन्युअल रूप से ट्रिगर करने के लिए निम्नलिखित को जोड़ा:

$(".chosen-select").each(function() {
  $(this).chosen().on("change", function() {
    $(this).parents(".form-group").find("select.form-control").trigger("focusout.validate");
  });
});

jquery.validate अब .validअंतर्निहित चयन सूची में कक्षा जोड़ देगा ।

कैविएट: इसके लिए आपके फॉर्म इनपुट के लिए एक सुसंगत html पैटर्न की आवश्यकता होती है। मेरे मामले में, दायर प्रत्येक इनपुट में लिपटे हुए हैं div.form-groupऔर प्रत्येक इनपुट में है .form-control


-15

बस पाठ को अनदेखा करें: ": छिपा हुआ" अपनी jquery सत्यापन फ़ाइल में और टिप्पणी करें। इस टिप्पणी के बाद यह किसी भी छिपे हुए तत्वों को मान्य करने के लिए नुकसान नहीं होगा ...

धन्यवाद


5
कभी भी किसी थर्ड पार्टी लाइब्रेरी में कोड को बेतरतीब ढंग से कमेंट करने का एक अच्छा विचार नहीं है।
जैक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.