2011-11-05 10 views
24

क्या किसी निश्चित सत्यापनकर्ता (क्रेडिट कार्ड) के लिए jQuery सत्यापन को अक्षम करने का कोई तरीका है ताकि यह केवल ऑनकीप की बजाय ऑनब्लर पर हो?एएसपीनेट एमवीसी 3 jQuery सत्यापन; Unobtrusive OnKeyUp अक्षम करें?

jQuery सत्यापनकर्ता प्रलेखन मैंने सोचा कि मैं कुछ इस तरह कर सकता है के आधार पर:

$(function() { 
    $("[data-val-creditcard]").validate({ 
     onkeyup: false 
    }) 
}); 

हालांकि, यह काम करने लगता है।

मैं अपने सत्यापनकर्ता पर निम्न कार्य करने की कोशिश की:

public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute> 
{ 
    string _message; 

    public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute) 
     : base(metadata, context, attribute) 
    { 
     _message = attribute.ErrorMessage; 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     var rule = new ModelClientValidationRule 
     { 
      ErrorMessage = _message, 
      ValidationType = "creditcard" 
     }; 
     rule.ValidationParameters.Add("onkeyup", false); 
     return new[] { rule }; 
    } 
} 

यह या तो काम नहीं करता है, लेकिन मैं सिर्फ ValidationParameters के उचित उपयोग पर एक चाकू ले रहा था।

एक फॉर्म में क्रेडिट कार्ड नंबर दर्ज करने के लिए परेशान करना और इसे अमान्य से वैध में बदलना, फिर वापस अमान्य होना है।

कोई विचार? धन्यवाद!

उत्तर

17

ठीक है दोस्तों,

मैं एक ही समस्या में था और इस सूत्र मिला: http://old.nabble.com/-validate--onkeyup-for-single-field-td21729097s27240.html

विचार मूल रूप से KeyUp घटना के ऊपर लिख और झूठे वापस जाने के लिए है। और आप देखेंगे कि आपके क्रेडिट कार्ड क्षेत्र केवल कलंक पर चेक किया गया है या प्रस्तुत (लेकिन बाकी भी KeyUp पर काम कर रहा है)

$('#my-form').validate({ 
    rules: { 
    [...] 
    } 
} 
// Disable keyup validation for credit card field 
$("[data-val-creditcard]").keyup(function() { return false }); 

: तो अपने विशिष्ट मामले में आप जोड़ने की आवश्यकता होगी।

मैं एक ही समाधान की तलाश में था, और पाया कि यहां जवाब में सुधार किया जा सकता है, इसलिए मैंने सोचा कि इसे यहां साझा करना अच्छा होगा।

+2

झूठी वापसी करके कीप को अक्षम करने पर शानदार युक्ति। – Sam

+0

यह एकमात्र दृष्टिकोण था जो मैंने पाया कि कुंजीपटल सत्यापन को दबाने में सक्षम था। यह अत्यधिक था क्योंकि मैं इनपुट को प्रमाणित करने के लिए अजाक्स कॉल कर रहा था। अंत में, मैंने इनपुट तत्व पर एक डेटा विशेषता सेट की जिसे इनपुट तत्व के लिए एक अस्थायी घटना के AJAX परिणाम द्वारा नियंत्रित किया गया था। यह डेटाबेस सत्यापन के लिए सर्वर से अनुरोध करते समय jquery को एक साधारण वापसी सही या गलत होने की अनुमति देता है। –

+1

दबाने के लिए कई घटनाएं थीं, मैंने उनके लिए एक सरल प्लेसहोल्डर बनाया, 'var fnfalse = function() {वापसी झूठी; } ', और उसके बाद कार्यक्षमता को अवरुद्ध करने के लिए उपयोग किया जाता है,' $ (तत्व) .keyup (fnfalse) .blur (fnfalse)। फ़ोकसआउट (fnfalse); '। –

5

एक विशेष क्षेत्र के लिए सेट करने के लिए कैसे जानते हैं, लेकिन आप सत्यापन KeyUp निष्क्रिय करने के लिए (सभी क्षेत्रों के लिए) इस कोशिश कर सकते:

$.validator.setDefaults({ 
    onkeyup: false 
}) 

देखें

+0

हाँ, मैंने देखा। मुझे इसे अधिकांश फ़ील्ड पर पसंद है, सिर्फ क्रेडिट कार्ड फ़ील्ड या रिमोट सत्यापन फ़ील्ड नहीं (मैं एक चरित्र के हर बदलाव के बजाय वेबसाइट पर एक बार ऑनबर्ट करने की प्रतीक्षा करता हूं)। बस एक सीमा हो सकती है जिसके साथ मुझे रहना है। मैं शायद ऊपर बताए गए वैश्विक सेट डिफॉल्ट करूँगा ... – Sam

+0

... सबसे पहले मैं इसे यह सुनिश्चित करने के लिए कि दस्तावेज़ और स्क्रिप्ट लोड हो गई थीं और उपयोग करने के लिए तैयार थीं, लेकिन यह काम नहीं कर सका। मुझे इसे काम करने के लिए इसे खींचना पड़ा, उदाहरण: <स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट"> $। Validator.setDefaults ({onkeyup: false})});। हालांकि, मैं सोच रहा हूं कि क्या होगा यदि उपयोगकर्ता ने अभी तक स्क्रिप्ट डाउनलोड नहीं किया है। मैंने उन्हें सिर के बजाय दस्तावेज़ के नीचे रखा है। – Sam

+0

बस "ऑनकीअप" को अक्षम करना – Sam

0

आप ऑनफोकस में डिफ़ॉल्ट को सेट कर सकते हैं क्रेडिट फ़ील्ड की घटना, फिर उन्हें ऑनब्लर में बदल दें। हैकी लगता है, लेकिन काम कर सकता है।

20

$.validator.setDefaults अविभाज्य सत्यापन के लिए काम नहीं करता है क्योंकि सत्यापनकर्ता आंतरिक रूप से प्रारंभ होता है।

रूपों है कि विनीत सत्यापन का उपयोग पर सेटिंग बदलने के लिए आप निम्न कर सकते हैं:

var validator = $("form").data("validator"); 
if (validator) { 
    validator.settings.onkeyup = false; // disable validation on keyup 
} 
+0

http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3583148-update-jquery- validate-unobtrusive-implementation- –

+0

यह सभी तत्वों के लिए कीप सत्यापन ट्रिगर को अक्षम करेगा, नहीं? वह पूछ रहा था कि इसे केवल 1 तत्व के लिए कैसे अक्षम करें। – TweeZz

9

मुझे पता है यह एक पुरानी पोस्ट है, लेकिन जवाब में से कोई भी इस सवाल का जवाब दिखाई देते हैं,

ऑनकीप को अक्षम करने और ऑनब्लूर को सक्षम करने के लिए कैसे करें?

मैं इस विचार को देख रहा था कि मैं जवाब साझा करूंगा।

बेन फोस्टर के रूप में ठीक ही कहा है, onkeyup निम्नलिखित

var validator = $("form").data("validator"); 
if (validator) { 
    validator.settings.onkeyup = false; 
} 

कर onBlur हम

validator.settings.onfocusout = function(element) 
{ 
    $(element).valid(); 
}; 

onfocusout उपयोग कर सकते हैं सत्यापन सक्षम इसलिए हमारे कोड onkeyup निष्क्रिय करने के लिए और onBlur देखने के सक्षम करने के लिए द्वारा निष्क्रिय किया जा सकता इस तरह

var validator = $("form").data("validator"); 
     if (validator) 
     { 
      validator.settings.onkeyup = false; 
      validator.settings.onfocusout = function(element) 
      { 
       $(element).valid(); 
      }; 
     } 
1

आप उपरोक्त की तरह कुछ भी उपयोग कर सकते हैं,

$("form").validate({ 
    onfocusout: false, 
    onkeyup: false 
}); 

मामले में आप कस्टम नियम तो है,

$("form").validate({ 
    onfocusout: false, 
    onkeyup: false, 
    rules: { 
     "name1": { 
      required: true, 
      email: true, 
      maxlength: 100 
     }, 
     "name2": { 
      required: true, 
      number: true 
     } 
    } 
}); 

jQuery मंच में This answer मुझे एक बहुत मदद की।

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