'number: true' делает поле обязательным для проверки в jquery - PullRequest
5 голосов
/ 28 октября 2011

Я использую плагин jQuery Validation

Я хочу, чтобы одно из моих полей было числом, но это не обязательное поле.

Дело в том, что когда я устанавливаю number: true, это делает поле обязательным. Это почему? Я пытался добавить required: false с number: true, но безрезультатно.

Это мой код:

name : {
    required:false,
    number:true
}

Я не устанавливаю сообщение об ошибке, но оно показывает сообщение об ошибке по умолчанию: «пожалуйста, введите правильный номер».

Ответы [ 5 ]

6 голосов
/ 28 октября 2011

В исходном коде они используют это регулярное выражение для проверки числа:

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/

Когда поле пустое (""), оно не проходит тест:

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test("")
//false
3 голосов
/ 10 января 2012

Вы можете попробовать написать свой собственный валидатор.Это не так уж сложно.Примерно так:

$.validator.addMethod
(
    "number2",
    function (value, element)
    {
        // Remove numberish characters.
        value = value.replace("$", "").replace(",", "");

        // A regex might be better but this works too.
        if (!isNaN(parseFloat(value)))
        {
            $(element).val(parseFloat(value));
            return true;
        }
        else if (value === "") // handle empty value
        {
            return true;
        }
        else
        {
            return false;
        }
    },
    "Numeric only."
);

Затем примените правило, например:

$.validator.addClassRules("numeric", { number2: true });

Вариант этой темы можно применить к целочисленным или валютным значениям и, конечно, вы можетедовольно сложный с проверкой и «очисткой» данных.

0 голосов
/ 29 ноября 2013

Вы должны использовать <input> с атрибутом type, равным text, а не number:

<input type="text" id="phone" name="phone" />
0 голосов
/ 09 января 2013

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

// http://docs.jquery.com/Plugins/Validation/Methods/number
number: function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},

Уведомление this.optional(element) ||

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

, кстати, спасибо за этот пост, который нашел мне способ найти это.

0 голосов
/ 28 октября 2011

Работает нормально @ http://jsfiddle.net/b3RmV/1/

Показывает ошибку только для нечисловых символов, в противном случае необходимо отправить форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...