2012-02-09 9 views
16

पर काम करने के लिए नहीं मिल सकता है, मैं jquery unobstructive क्लाइंट सत्यापन के साथ अल्पविराम समस्या को ठीक करने के लिए jQuery वैश्वीकरण प्लगइन का उपयोग करने का प्रयास करता हूं। हालांकि मैंने कई सारे समाधानों की कोशिश की और इसे ठीक करने के लिए कोई अच्छा समाधान नहीं है। मैं एक गैर-अंग्रेजी स्थानीयकरण कंप्यूटर पर हूं और यह महत्वपूर्ण है कि मेरे ग्राहक दशमलव मान दर्ज करें जैसे "123,66" और "123.66" नहीं। एएसपी.नेट सत्यापन मुझे बताता है कि कीमत एक संख्या होनी चाहिए! मेह? क्या आप गंभीर हैं ? loljquery वैश्वीकरण को

जब मैं ठीक करने का प्रयास करता हूं तो मुझे यह जावास्क्रिप्ट त्रुटि मिल रही है।

$.global is undefined 

यहां मेरा कोड।

Layout.cshtml

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script> 

    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"> </script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"type="text/javascript"></script> 

    <script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script> 

    <script src="@Url.Content("~/Scripts/jquery.form.js")"type="text/javascript"></script> 

    <script src="@Url.Content("~/Scripts/glob.fix.js")" type="text/javascript"></script> 
</head> 

<body> 
    @RenderBody() 
</body> 
</html> 

glob.fix.js

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

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); 
} 

मैं नहीं समझ सकता .. यह काम करना चाहिए के बाद से मैं ~/Scripts/globalize.js गयी।

कोई विचार? या आपके पास क्लाइंट सत्यापन कार्य करने के लिए एक बेहतर समाधान हो सकता है और मुझे अल्प मानों के रूप में अल्पविराम में प्रवेश करने देता है?

+0

श्रेणी सत्यापनकर्ता कोड के लिए धन्यवाद! –

उत्तर

21

मुझे अंत में अल्पविराम सेपरेटर के साथ दशमलव समस्या से छुटकारा पाने का तरीका मिला!

परिणाम की एक तस्वीर यहां! कोई और सत्यापन समस्या नहीं है।

enter image description here

ठीक करने के लिए कदम।

1- जाओ Globalization library for jQuery

आप नवीनतम स्क्रिप्ट मिल जाना चाहिए! इसके अलावा मुझे वहां कुछ जवाब मिले जो पुराने थे।
लाइब्रेरी को कॉल करने का ऑब्जेक्ट अब $.global या ऐसा कुछ भी नहीं है लेकिन Globalize है।

2- अपनी परियोजना में स्क्रिप्ट शामिल करें। आपको jquery.validation सामान के बाद उन्हें जोड़ना होगा।

<script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script> 

3- सत्यापनकर्ता के कुछ तरीकों को बदलें। यह 'संख्या' और 'श्रेणी' सत्यापन के तरीकों को ओवरराइड करेगा जो समस्याएं पैदा कर रहा था।

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || !isNaN(Globalize.parseFloat(value)); 
} 

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

Globalize.parseFloat => यह वास्तव में कुछ भी है कि होता है ',' करने के लिए बदल देगा '।' यदि आपने ऐसी संस्कृति का चयन किया जिसकी आवश्यकता है।

इसके बाद .. आपको जोड़ना होगा। यह वैश्वीकरण कार्यों को संस्कृति के साथ काम करने के लिए तैयार करेगा।

$(document).ready(function() { 
     Globalize.culture('fr-CA'); 

     // Only there to show which culture are being used. 
     console.log(Globalize.culture().name); 
}); 

पूरा कोड देखो की तरह ...

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"> </script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/cultures/globalize.cultures.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.form.js")"type="text/javascript"></script> 


<script type="text/javascript"> 

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

    $(document).ready(function() { 
     Globalize.culture('fr-CA'); 

     // Only there to show which culture are being used. 
     console.log(Globalize.culture().name); 
    }); 
</script> 

</head> 

<body> 
    @RenderBody() 
</body> 
</html> 
+0

आप स्वीकार्य उत्तर के रूप में अपना उत्तर चिह्नित कर सकते हैं। Merci :-) – Ubikuity

+0

धन्यवाद। मैंने किया! :) – Rushino

+0

github url में स्थित globalize.js फ़ाइल कहां है? – Levimatt

2

ठीक है, एक ही समस्या हल करने के लिए, मैंने किया था:

$.validator.addMethod("price",function(value){ 
    return /^(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); 
}); 

और फिर नियम के रूप में जोड़ा विधि का इस्तेमाल किया:

$("#form").validate({ 
    rules: { 
     price: "price" 
    } 
}); 

मैं "उधार" सत्यापन प्लगइन से ही सत्यापनकर्ता regex , और डॉट्स . और कॉमा , (हजार विभाजक एक्स दशमलव विभाजक) को उलटा कर दिया।

+0

आपने यह मान्य (...) कहां रखा? – Rushino

+0

http://docs.jquery.com/Plugins/Validation/ - पहले उदाहरण/डेमो –

+0

के "स्रोत देखें" को देखें, मुझे लगता है कि मुझे एएसपीनेट एमवीसी से अनियंत्रित सत्यापन का उपयोग नहीं करना चाहिए बल्कि केवल उपयोग करें इसके बजाय प्लगइन। (मुझे पता है कि एएसपीनेट एमवीसी प्लगइन का उपयोग करता है लेकिन ऐसा लगता है कि मुझे कुछ ऐसी समस्याएं नहीं मिलती हैं जो मुझे बहुत सारी समस्याएं पैदा करती हैं) – Rushino

0

जो भी कारण मैंने अपने globalize संदर्भ बदलना पड़ा:

<script src="@Url.Content("~/Scripts/globalize/globalize.js")" type="text/javascript"</script> 

<script type="text/javascript" src="~/Scripts/globalize/globalize.js"</script> 

करने और जिसने मेरी समस्या हल की। 30 मिनट तक पागल हो गया जब तक कि मैं इसे काम करने के लिए नहीं मिला। अगर कोई समझा सकता है कि मैं क्यों प्रशंसा करूंगा।

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