2012-02-09 2 views
16

Я пытаюсь использовать плагин jQuery для глобализации, чтобы исправить проблему с запятой при проверке подлинности клиента jquery unobstructive. Однако я пробовал много решений, и нет хорошего решения, чтобы исправить это. Я на компьютере, не являющемся английским, и это важно, чтобы мои клиенты вводили десятичное значение, например «123,66», а не «123,66». Проверка ASP.NET говорит мне, что цена должна быть числом! Мех? ты серьезно ? lolНе удается заставить jQuery globalization работать

Я получаю эту ошибку javascript, когда пытаюсь сделать исправление.

$.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

Где находится файл Globalize.js, расположенный по адресу github? – Levimatt

2

Ну, чтобы решить ту же проблему, я сделал:

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

, а затем использовали добавленный метод, как правило:

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

Я «позаимствовал» валидатор регулярное выражение из самого плагина проверки , и перевернул точки . и запятые , (разделитель десятичной разделитель X).

+0

Где вы это подтвердили (...)? – Rushino

+0

http://docs.jquery.com/Plugins/Validation/ - посмотрите на «Просмотр источника» первого примера/демонстрации –

+0

Я начинаю думать, что я не должен использовать функцию unprostive validation из asp.net mvc, но использовать только плагин. (Я знаю, что asp.net mvc использует этот плагин, но, похоже, я не получаю контроль над чем-то, что вызывает у меня много проблем) – 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 минут, пока я не получил его на работу. Если кто-нибудь может объяснить, почему я буду увлекаться.

Смежные вопросы