Validación de activador en el formulario con múltiples secciones y campos de entrada desconocidos

Estoy tratando de validar una forma compleja y por compleja me refiero a que la forma es solo una, pero se dividió en cuatro secciones e hice un simple asistente para mostrarlas. Estoy usandoValidación de jQuery Pero no funciona como quiero y también tengo algunas dudas al respecto. Residencia eneste ejemplo (segunda forma) hice mi código de la siguiente manera:

$("#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"
        }
    }
});

Si entiendo bien entonces enkeyup los campos de evento deben validarse y no lo son, ya que los errores no aparecen. Así que el primer problema con respecto a esto es: ¿por qué no se valida? ¿Qué hay de malo en mi solución? El segundo es cómo validar.product_price yproduct_quantity ¿Sólo si son visibles?

Ahora, con respecto a este mismo tema, tengo otra duda, creo varios campos sobre la marcha y sí, sé su ID cada vez, en este caso, ¿cómo aplico las reglas a esos campos?

ACTUALIZAR

Me imagino dónde está el problemakeyup was, la validación se realiza con el nombre de entrada y no con el ID de entrada, así que esta parte está terminada.

El segundo problema sigue pendiente. Por ejemplo puedo generar tres campos con nombrevariation[pprice][] y la mosca, pero pueden ser cinco o más o lo que sea, ¿cómo agrego esos campos a las reglas y la parte de validación? ¿Puedo añadir la regla paravariation[pprice][] ¿Y se validará sin importar cuántos elementos con el mismo nombre hay en el formulario?

También está pendiente la parte de validar campos solo si están visibles.

ACTUALIZACIÓN 2

Ya quevariation[pprice][] es una matriz de elementos, puedo usar$.each ¿Moverse por ellos y asignar reglas?

ACTUALIZACIÓN 3

Siguiendo las recomendaciones de @Sparky, cambio mi código a esto:

$('#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"
        }
    });
});

Pero en Firebug me sale este error:

TypeError: e.validator.methods [o] no está definido

¿Qué impide la ejecución de código para el script, lo que me falta en este caso?

ACTUALIZACIÓN 4

Suponiendo que no puedo usar varios formularios, así que solo tengo un formulario con muchas secciones (usandosection etiqueta) y me manejo para moverme entre cada uno. Estoy tratando de llamarvalidate() en la misma forma pero dos veces y validación enstep5 No funcionó ya que los campos pasan. Este es el código que estoy usando para eso:

función validateWizard (paso) {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,
                    maxlength: 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;

}

Mi pregunta es por qué si la forma no es válida enstep5 se pasa? ¿No debería fallar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta