Установить правило для ненавязчивой проверки для игнорирования атрибута шага - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть форма, в которой пользователь должен выбрать дату рождения. В качестве средства выбора даты я использую flatpickr , который на мобильных устройствах создает новое поле ввода, в котором используется собственный выбор даты на мобильном устройстве. Созданный элемент выглядит следующим образом:

<input type="date" step="any" min="..." max="...">

Я также использую ненавязчивую проверку JQuery, но проверка формы завершается с ошибкой:

Step attribute on input type date is not supported

Я нашел решение для этой ошибки:

onReady: (selectedDates, dateStr, instance) => {
    if (instance.isMobile) {
        $(instance.mobileInput).removeAttr("step");
    }
}

, но атрибут step полностью удален из ввода, что нехорошо. И эта ошибка больше связана с ненавязчивой проверкой, а не flatpickr. Другое решение, которое я нашел здесь , и я думаю, что лучше, добавляет новое правило проверки:

$("#testingform").validate({
    rules: {
        date1: {step: false}
    }
});

Я знаю, что эта проверка предназначена для собственной проверки JQuery, но для простоты я представляю это. (Вы можете получить доступ к ненавязчивым правилам проверки с помощью $("form").validate().settings.) Однако это решение действительно только для одного конкретного поля с name="date1". Можно ли каким-то образом установить ненавязчивое правило проверки, которое говорит что-то вроде «Игнорировать все атрибуты шага»?

1 Ответ

1 голос
/ 08 ноября 2019

Вы просматривали документы для плагина jQuery Validate? Хотя этот плагин автоматически устанавливает правила проверки на основе любых встроенных атрибутов, вы также можете динамически удалить любое правило, используя метод .rules('remove').

Динамическое удаление правила step из элемента, соответствующего name="date1", без удаления каких-либо атрибутов HTML или изменения DOM.

$('[name="date1"]').rules('remove', 'step');

Обратите внимание, что плагин jQuery Validate уже должен быть инициализирован встраница перед вызовом этого метода.

это решение действительно только для одного конкретного поля с именем = "date1". Можно ли каким-то образом установить ненавязчивое правило проверки, которое говорит что-то вроде «Игнорировать все атрибуты шага»?

Вам просто нужно изменить селектор, чтобы настроить таргетинг на все элементы, содержащие атрибут stepи заключать в пределах .each(). jQuery Validate будет соответствовать только первому элементу в целевой группе, поэтому использование .each() обязательно.

$('[step]').each(function() {
    $(this).rules('remove', 'step');
});
...