Метод проверки формы jQuery в нескольких формах

0

Краткое описание: Страница с ~ 30 формами, используя специальный метод для проверки с помощью плагина проверки jQuery (сравнивает поле 1 с полем 2 и делает поле 2> = поле 1).

У меня в основном есть эта проблема, кроме 30 форм на странице, а не только 2. Я думал, что могу использовать тег класса, чтобы плагин проверки мог захватить вход, который в той же форме, что и проверка, но он всегда подходит для тот, который в первом виде, даже при проверке второй формы.

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

Ниже приведен код jsfiddle html:

<form id='test'>Start :
    <select name='start' class='dayStart'>
        <option value='1'>1</option>
        <option value='1.5'>1.5</option>
        <option value='2'>2</option>
    </select>
    <br />Stop :
    <select name='stop' class='dayStop'>
        <option value='1'>1</option>
        <option value='1.5'>1.5</option>
        <option value='2'>2</option>
    </select>
    <br />
    <input type='submit' />
</form>
<form id='test2'>Start :
    <select name='start' class='dayStart'>
        <option value='1'>1</option>
        <option value='1.5'>1.5</option>
        <option value='2'>2</option>
    </select>
    <br />Stop :
    <select name='stop' class='dayStop'>
        <option value='1'>1</option>
        <option value='1.5'>1.5</option>
        <option value='2'>2</option>
    </select>
    <br />
    <input type='submit' />
</form>

И js здесь:

jQuery.validator.addMethod("stop_boet_start", function () {
    return (parseFloat($(".dayStop").val()) >= parseFloat($(".dayStart").val()));
}, "* error_msg");

$("#test").validate({
    rules: {
        stop: {
            stop_boet_start: true
        }
    }
});

$("#test2").validate({
    rules: {
        stop: {
            stop_boet_start: true
        }
    }
});
Теги:
validation

2 ответа

1
Лучший ответ

Чтобы найти правильные элементы dayStart и dayStop, вы можете использовать следующее:

jQuery.validator.addMethod("stop_boet_start", function (value, element, params) {
    var form = $(element).closest("form");

    var dayStop = form.find(".dayStop");
    var dayStart = form.find(".dayStart");

    return (parseFloat(dayStop.val()) >= parseFloat(dayStart.val()));
}, "* error_msg");

$("#test").validate({
    rules: {
        stop: {
            stop_boet_start: true
        }
    }
});

$("#test2").validate({
    rules: {
        stop: {
            stop_boet_start: true
        }
    }
});
  • 0
    Отлично, спасибо!
0

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

jQuery(function ($) {
    jQuery.validator.addMethod("stop_boet_start", function () {
        return (parseFloat($(".dayStop").val()) >= parseFloat($(".dayStart").val()));
    }, "* error_msg");

    jQuery.validator.addClassRules("dayStop", {
        stop_boet_start: true
    });

    $("form").validate({});

});

Демо: скрипка

Или итерации по списку форм добавить добавить правила, как

$(".test").each(function () {
    $(this).validate({
        rules: {
            stop: {
                stop_boet_start: true
            }
        }
    });
})

Демо: скрипка

  • 0
    Проблема в том, что $(".dayStop").val() и $(".dayStart").val() всегда будут использовать значение первого элемента с классами .dayStop и .dayStart соответственно.
  • 0
    @chearius да ... нужно настроить таргетинг на dayStart из той же формы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню