Проверка запуска в форме с несколькими разделами и неизвестными полями ввода

Я пытаюсь проверить сложную форму, и под комплексом я подразумеваю, что форма только одна, но она была разбита на четыре раздела, и я создал простой мастер, чтобы показать их. я используюПроверка JQuery но это не работает так, как я хочу, а также есть некоторые сомнения по этому поводу. На основеэтот пример (вторая форма) Я сделал свой код следующим образом:

$("#product_create").validate({
    rules: {
        product_name: {
            required: true,
            minlength: 10,
            maxlength: 50
        },
        product_price: {
            required: true,
            number: true,
            minlength: 2
        },
        product_quantity: {
            required: true,
            digits: true,
            minlength: 1
        }
    },
    messages: {
        product_name: {
            required: "El nombre del producto no se puede dejar vacío",
            minlength: "El nombre del producto no puede tener menos de 10 carácteres",
            maxlength: "El nombre del producto no puede tener más de 50 carácteres"
        },
        product_price: {
            required: "Debes introducir un precio",
            number: "El precio debe ser un número decimal o no"
        },
        product_quantity: {
            required: "Debes introducir una cantidad",
            number: "La cantidad debe ser un número"
        }
    }
});

Если я хорошо понимаю, то наkeyup поля события должны проверяться, а они нет, так как ошибки не появляются. Итак, первая проблема, связанная с этим: почему она не проверяется? Что не так в моем решении? Второй - как я проверяюproduct_price а такжеproduct_quantity только если они видны?

Теперь в отношении этой же темы у меня есть еще одно сомнение: я создаю несколько полей на лету и да, я каждый раз знаю их ID, в таком случае, как я применяю правила к этим полям?

ОБНОВИТЬ

Я выясняю, где проблема сkeyup был, проверка производится по имени входа, а не по идентификаторам ввода, как я жестко, так что эта часть выполнена.

Вторая проблема еще не решена. Например, я могу сгенерировать три поля с именемvariation[pprice][] и летать, но может быть пять или более или что-то еще, как мне добавить эти поля в правила и часть проверки? Могу ли я просто добавить правило дляvariation[pprice][] и он будет проверять независимо от того, сколько элементов с одинаковым именем находится в форме?

Также ожидает часть проверяемых полей, только если они видны

ОБНОВЛЕНИЕ 2

посколькуvariation[pprice][] это массив предметов, могу ли я использовать$.each двигаться за ними и назначать правила?

ОБНОВЛЕНИЕ 3

Следуя рекомендациям @Sparky, я изменяю свой код на этот:

$('#variations_holder input.pprice').each(function() {
    $(this).rules('add', {
        required: true,
        number: true,
        messages: {
            required: "Debes introducir un precio de la variación",
            number: "El precio de la variación debe ser un valor numérico o decimal"
        }
    });
});

Но в Firebug я получаю эту ошибку:

Ошибка типа: e.validator.methods [o] не определено

Что мешает выполнению кода для скрипта, что мне не хватает в этом случае?

ОБНОВЛЕНИЕ 4

Предположим, что я не могу использовать несколько форм, поэтому у меня есть только одна форма с несколькими разделами (используяsection тег) и я справляюсь для перемещения между ними. Я пытаюсь позвонитьvalidate() в той же форме, но два раза и проверка вstep5 не работает, так как поля проходят. Вот код, который я использую для этого:

function validateWizard (step) {var is_valid = true;

switch (step) {
    case 1:
        if ($("#selected_category").val() === '' || $("#selected_category").val().length === 0) {
            alert("Debes seleccionar una categoría antes de continuar");
            is_valid = false;
        }
        break;
    case 2:
        $("#product_create").validate({
            rules: {
                "product[name]": {
                    required: true,
                    minlength: 10,
                    m,axlength: 50
                },
                "product[price]": {
                    required: true,
                    number: true,
                    minlength: 2
                },
                "product[quantity]": {
                    required: true,
                    digits: true,
                    minlength: 1
                },
                "product[description]": {
                    required: true
                }
            },
            messages: {
                "product[name]": {
                    required: "El nombre del producto no se puede dejar vacío",
                    minlength: "El nombre del producto no puede tener menos de 10 carácteres",
                    maxlength: "El nombre del producto no puede tener más de 50 carácteres"
                },
                "product[price]": {
                    required: "Debes introducir un precio",
                    number: "El precio debe ser un valor numérico o decimal"
                },
                "product[quantity]": {
                    required: "Debes introducir una cantidad",
                    number: "La cantidad debe ser un número"
                },
                "product[description]": {
                    required: "Debes introducir una descripción del producto"
                }
            }
        });

        is_valid = $("#product_create").valid();

        if (is_valid) {
            $('#variations_holder input.pprice').each(function() {
                pprice = $.trim(this.value);
                if (!pprice.length) {
                    $(this).focus();
                    $(this).addClass('error');
                    is_valid = false;
                } else if (!/^[1-9]\d*(\.\d+)?$/.test(pprice)) {
                    $(this).addClass('error');
                    is_valid = false;
                }
            });

            // Validate quantity in variation
            $('#variations_holder input.pqty').each(function() {
                pqty = $.trim(this.value);
                if (!pqty.length) {
                    $(this).focus();
                    $(this).addClass('error');
                    is_valid = false;
                } else if (!/^[1-9]\d*$/.test(pqty)) {
                    $(this).addClass('error');
                    is_valid = false;
                }
            });
        }
        break;
    case 3:
        break;
    case 5:
        $("#product_create").validate({
            rules: {
                "stock[sku]": {
                    required: true,
                    minlength: 10,
                    maxlength: 20
                },
                "stock[width]": {
                    required: true,
                    number: true,
                    minlength: 1
                },
                "stock[height]": {
                    required: true,
                    number: true,
                    minlength: 1
                },
                "stock[length]": {
                    required: true
                },
                "stock[weight]": {
                    required: true,
                    number: true,
                    minlength: 1
                },
                "stock[description]": {
                    required: true
                },
                "warranty[description]": {
                    required: true
                },
                "warranty[valid_time]": {
                    required: true,
                    digits: true
                }
            },
            messages: {
                "stock[sku]": {
                    required: "El SKU no se puede dejar vacío",
                    minlength: "El SKU no puede tener menos de 10 carácteres",
                    maxlength: "El SKU no puede tener más de 50 carácteres"
                },
                "stock[width]": {
                    required: "Debes introducir un ancho",
                    number: "El ancho debe ser un número"
                },
                "stock[height]": {
                    required: "Debes introducir una altura",
                    number: "La altura debe ser un número"
                },
                "stock[length]": {
                    required: "Debes introducir una longitud",
                    number: "La longitud debe ser un número"
                },
                "stock[weight]": {
                    required: "Debes introducir un peso",
                    number: "El peso debe ser un número"
                },
                "stock[description]": {
                    required: "Debes introducir una descripción del stock del producto"
                },
                "warranty[description]": {
                    required: "Debes introducir una descripción de la garantía para este producto"
                },
                "warranty[valid_time]": {
                    required: "Debes introducir un período de validez",
                    digits: "El período de validez no es válido"
                },
            }
        });

        is_valid = $("#product_create").valid();
        break;
}

return is_valid;

}

мой вопрос: почему, если форма недействительна наstep5 это пройдет? Не должен потерпеть неудачу?

Ответы на вопрос(2)

Ваш ответ на вопрос