Используйте jquery плагин проверки для проверки сложного массива ввода - PullRequest
0 голосов
/ 21 апреля 2020

Я использую jquery плагин проверки для проверки сложного массива входных данных.

HTML форма

<form class="test_frm" action="" method="post" >
    <input class="form-control" type="text" name="rateType[0][type]" />
    <input class="form-control" type="text" name="rateType[0][rate]" />
    <input class="form-control" type="text" name="rateType[0][percent]" />

    <input class="form-control" type="text" name="rateType[1][type]" />
    <input class="form-control" type="text" name="rateType[1][rate]" />
    <input class="form-control" type="text" name="rateType[1][percent]" />

    <input class="form-control" type="text" name="rateType[2][type]" />
    <input class="form-control" type="text" name="rateType[2][rate]" />
    <input class="form-control" type="text" name="rateType[2][percent]" />
</form>

JS код

$(function () {
    $(".test_frm").validate({
        submitHandler: function (form) {
            form.submit();
        },
        ignore: [],
        rules: {
            'rateType[]': {
                required: true
            }
        }
    });
});

Что мне нужно с проверкой, так это должно быть истиной, если хотя бы один текстовый ввод заполнен . Но этот код не работает, хотя он работал для простых входных данных массива. Будет большая помощь, если кто-то знает, как это сделать. И замечательно, если это не зависит от значения массива, такого как [0] или [тип] .

1 Ответ

1 голос
/ 21 апреля 2020
rules: {
    'rateType[]': {  // <- does not match any NAME on the form!
        required: true
    }
}

Идентификатор, используемый в ваших параметрах , должен соответствовать названию поля.

rules: {
    'rateType[0][type]': {
        required: true
    },
    'rateType[0][rate]': {
        required: true
    },
    'rateType[0][percent]': {
        required: true
    },
    // etc. etc. for every field on the form.
}

Поскольку это довольно громоздко, вы можете использовать .rules() method вместе с более общим c селектором вроде "начинается с" . Вам понадобится .each(), поскольку этот плагин проверки не принимает выборку с более чем одним элементом.

$("[name^='rateType']").each(function() {
    $(this).rules('add', {
        required: true
    });
});

ПРИМЕЧАНИЕ : метод .rules() можно вызывать только после Вы вызвали свой метод .validate().

$(function () {

    $(".test_frm").validate({
        submitHandler: function (form) {
            form.submit();
        },
        ignore: [],
    });

    $("[name^='rateType']").each(function() {
        $(this).rules('add', {
            required: true
        });
    });

});

В качестве альтернативы, если вы хотите решение HTML, вы можете просто добавить встроенный класс или атрибут HTML5 и jQuery Validate плагин подберет один из них автоматически.

<input class="form-control" type="text" name="rateType[0][type]" class="required" />

ИЛИ

<input class="form-control" type="text" name="rateType[0][type]" required="required" />
...