9

में ठीक से काम नहीं करता है। मैं jquery.validate.unobtrusive.js के साथ jQuery सत्यापन प्लगइन, v1.11.0,2/4/2013 का उपयोग कर रहा हूं।संख्यात्मक रेंज सत्यापन jquery.validate.unobtrusive.js

मुझे लगता है कि मुझे संख्यात्मक क्षेत्र के लिए रेंज सत्यापन की एक बग का सामना करना पड़ता है: प्रमाणीकरण न्यूनतम संख्या और अधिकतम संख्या वाले फ़ील्ड की संख्या की तुलना करने के बजाय, न्यूनतम और स्ट्रिंग के अधिकतम स्ट्रिंग के साथ स्ट्रिंग मान की तुलना करता है।

रेप्रो-कदम:

आप निम्न HTML का उपयोग कर, मान्यता रेंज 1-1000 सेट: 7.

अपेक्षित परिणाम:

<input name="Data.MaxConcurrentInstances" class="text-box single-line" id="Data_MaxConcurrentInstances" type="number" value="" data-val-number="The field Max concurrent instances must be a number." data-val="true" data-val-range-min="1" data-val-range-max="1000" data-val-range="The field Max concurrent instances must be between 1 and 1000."> 

आप परीक्षण क्षेत्र मान सेट: प्रमाणीकरण सफल। त्रुटियाँ नहीं।

वास्तविक परिणाम: प्रमाणीकरण विफल रहता है। आंतरिक कारण: यह विफल रहता है क्योंकि वर्णमाला रूप से स्ट्रिंग "7" स्ट्रिंग "1" और "1000" के बाद जाती है, न कि उनके बीच।

प्रश्न: क्या यह बग ज्ञात है? इसके लिए सबसे अच्छा कामकाज क्या है?

उत्तर

7

मैं भी इस समस्या का हल नहीं। मैंने अभी पुष्टि की है कि यह मेरे कोड को मैन्युअल रूप से अपडेट करके JQuery सत्यापन 1.11.1 अद्यतन में तय किया गया है। अद्यतन अभी तक NuGET रिपॉजिटरीज़ पर प्रकाशित नहीं हुआ है।

आप यहाँ से अद्यतन डाउनलोड कर सकते हैं: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

माइक्रोसॉफ्ट CDN पते दिए गए हैं: 3rd अप्रैल से

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js


अद्यतन:

NuGET पैकेज अद्यतन अब उपलब्ध है। यदि आप NuGET के माध्यम से JQuery सत्यापन 1.11.1 पर अपडेट करते हैं तो आपको समस्या ठीक हो जाएगी।

$.validator.methods.range = function (value, element, param) { 
     return this.optional(element) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1])); 
    } 

सत्यापनकर्ता प्लगइन में श्रृंखला के लिए वास्तविक कोड

range : function (value, element, param) { 
      return this.optional(element) || (value >= param[0] && value <= param[1]); 
     } 

है स्ट्रिंग प्रकार परिवर्तित करने पर:

+0

जानकारी के लिए धन्यवाद। क्या आपने वास्तव में इसका परीक्षण किया था? क्योंकि मैंने अन्य धागे देखे, लोग कह रहे थे कि यह पिछले संस्करणों के लिए कुछ समय पहले तय किया गया था, लेकिन ऐसा नहीं था। क्या कोई जानकारी है जब NuGet को अपडेट किया जाएगा? –

+0

हाय। हां, मैंने वास्तव में इसे अपने आवेदन पर परीक्षण किया। मेरे पास पूरी तरह से सीमा मान्यताओं और उनमें से सभी टूट गए थे। मैं बस जेएस फ़ाइल सामग्री (जो मूल रूप से NuGET द्वारा स्थापित किया गया था) को नए संस्करण (कॉपी और पेस्ट) के साथ बदल देता है और मेरे सभी पेज अब व्यवहार कर रहे हैं। NuGET पैकेज अब पहले ही रिलीज़ हो चुका है। – Iravanchi

+0

मैंने अपनी परियोजनाओं के लिए NuGet प्रबंधक में JQuery सत्यापन को अभी अपडेट किया है और अब रेंज सत्यापन ठीक काम करता है। –

1

अब तक सबसे अच्छा समाधान का मैंने पाया पैचिंग शुरू स्क्रिप्ट चल रही है:

$(document).ready(function() { 
    window.setTimeout(function() { 
     //Fixing jquery Unobtrusive validation range integer bug 
     var allRules = $.data(document.forms[0], "validator").settings.rules; 
     for (var ruleName in allRules) { 
      var rule = allRules[ruleName]; 

      if (rule.range != undefined && rule.number) 
       for (var ri = rule.range.length-1; ri >=0 ; ri--) { 
        rule.range[ri] = Number(rule.range[ri]); 
       } 
     } 
    }, 100); 
}); 
+0

मुझे एक ही समस्या है। उपर्युक्त कार्य-आसपास के काम, लेकिन इसके लिए/अगली लूप में मामूली बग है। लाइन 9 को इसके साथ बदलें: "के लिए (var ri = rule.range.length - 1; ri> = 0; ri--) {"। मैंने अपडेट किया, लेकिन परिवर्तन सहकर्मी समीक्षा द्वारा अनुमोदित किया जाना चाहिए। – Pando

+0

क्या आप समझा सकते हैं कि आप उल्टा क्रम में गणना क्यों करते हैं? –

+0

बेहतर प्रदर्शन के लिए आप प्रत्येक पुनरावृत्ति में सरणी की लंबाई का मूल्यांकन नहीं करना चाहते हैं। ऐसा करने के कुछ अलग तरीके हैं। Http://www.openjs.com/articles/for_loop.php – Pando

0

वैकल्पिक हल में से एक jQuery सत्यापनकर्ता की सीमा विधि ओवरराइड करने के लिए इस प्रकार होगा value, param[0] and param[1] में Number(value), Number(param[0]) and Number(param[1]) का उपयोग करके संख्या प्रकार में मूल्य स्ट्रिंग के बीच संख्या और नहीं के बीच उचित तुलना होती है।

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