Невозможно заставить работу jQuery

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

Я получаю эту ошибку 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.

Любая идея? или у вас может быть лучшее решение для проверки работоспособности клиента и позволяет вводить запятую в виде десятичных значений?

Ответы

Ответ 1

Я нашел способ окончательно избавиться от десятичной задачи с помощью разделителя запятой!

Вот картина результата! Больше проблем с проверкой.

enter image description here

Шаги к исправлению.

1- Получить Библиотека глобализации для jQuery

Вы должны получить последнюю версию script! Кроме того, я нашел несколько ответов, которые устарели.
Объект для вызова библиотеки не более $.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 = > Это фактически заменит все, что содержит ',' to '.' если вы выбрали нужную ему культуру.

После этого.. Вы должны добавить. Это заставит функции глобализации работать с культурой.

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

Ответ 2

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

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

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

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

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

Ответ 3

По какой-то причине мне пришлось изменить ссылку на globalize:

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

to

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

И это решило мою проблему. Пошел с ума в течение 30 минут, пока я не получил его на работу. Если кто-нибудь может объяснить, почему я буду увлекаться.