Проверка Jquery имеет серьезную ошибку в числовых полях, где первый символ является десятичным - PullRequest
3 голосов
/ 30 августа 2011

Я использую помощники asp.net-mvc3 и плагин проверки jquery (что выходит из коробки, когда вы используете шаблоны (Create, Edit и т. Д.), И у меня есть поле с именем MiniPrice, которое является dataType десятичный?

, поэтому на стороне клиента он подтверждает, что я ввожу число в текстовое поле.

, если я ввожу 1.25 , это работает нормально. Еслия ввожу 0,75 , он работает нормально, но если я ввожу .75 , это выдает ошибку проверки:

enter image description here

почему jqueryненавязчивая проверка думает, что .75 не является действительным числом?

Я обнаружил эту ошибку, которая была зарегистрирована несколько лет назад на основном сайте jquery, и была закрыта как непроблема с ядром jquery, а скорее проблема с плагином.

1 Ответ

5 голосов
/ 30 августа 2011

Это похоже на поведение валидатора.Я бы открыл проблему с jQuery, чтобы посмотреть, смогут ли (или захотят) ее решить.

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

$.validator.addMethod('myValidateNumber', function (value) { 
    return /^(\d\.|\.)?\d+$/.test(value); 
}, 'Please enter a valid number');

Это регулярное выражение появляется , чтобы делать то, что вы хотите - вероятно, есть и лучший способ написать это.Я не мастер регулярных выражений, но этого должно быть достаточно.

Тогда просто используйте myValidateNumber в class того, что вы проверяете.Вы можете узнать больше о расширении проверки jQuery здесь .

EDIT : Чтобы подключить это к MVC3 - взгляните на этот пост StackOverflow: Выполните клиентпроверка стороны для пользовательского атрибута .

По сути, мы создаем собственную проверку для этого, и вы можете применить свой собственный атрибут к модели.

РЕДАКТИРОВАТЬ 2: Похоже, что если вы используете validator.addMethod('number'..., это изменит поведение по умолчанию для числовой проверки.Это означает, что вам вообще не нужно менять свою модель MVC.В общем, добавление этого к вашей странице загрузки:

$.validator.addMethod('number', function (value) { 
    return /^(\d\.|\.)?\d+$/.test(value); 
}, 'Please enter a valid number');

Должно решить проблему.

...