'number: true' робить поле обов'язковим для валідації jquery

I am using the jQuery Validation plugin

Я хочу, щоб одне з моїх полів було числом, але це не обов'язкове поле.

Справа в тому, що, коли я встановлюю number: true , це вимагає поля. Чому так? Я намагався додати required: false з number: true , але безрезультатно.

Цей мій код:

name : {
    required:false,
    number:true
}

Я не встановлюю повідомлення про помилку, але він показує повідомлення про помилку за умовчанням: "введіть дійсний номер".

5
Проблема полягає в тому, що порожній рядок не є дійсним числом. Я не знаю достатньо про цей плагін, щоб дізнатися, як отримати (цілком розумно) поведінку, яку ви бажаєте.
додано Автор Pointy, джерело
Перевірте [цю демонстрацію] [1] [1]: docs.jquery.com/Plugins/ Перевірка/Методи/номер Змінити необхідний на помилковий і має бути добре, плюс ви можете показати свій html для отримання додаткової інформації.
додано Автор Min2liz, джерело

5 Відповіді

У вихідному коді вони використовують цей регулярний вираз для перевірки номера:

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

Якщо поле порожнє ( "" ), тест не проходить:

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test("")
//false
6
додано

Ви можете спробувати написати власний валідатор. Це не надто важко. Щось на зразок:

$.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 });

Варіант цієї теми може бути застосований до цілочисельних або валютних цінностей, і, звичайно, можна отримати досить складний варіант з перевіркою та "очищенням" даних.

3
додано

Ви повинні використовувати <input> з атрибутом type , рівним тексту , а не номеру :

<input type="text" id="phone" name="phone" />
0
додано

Works fine @ http://jsfiddle.net/b3RmV/1/

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

0
додано

Він працює відмінно, тому що в внутрішньому методі є додатковий матеріал, який потрібно додати до спеціального методу:

// 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);
},

Notice this.optional(element) ||

Ви повинні додати це на власний метод, щоб отримати користувальницьку роботу належним чином, коли немає необхідності

до речі спасибі за цю посаду, яка побачила мені спосіб знайти це.

0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram