Проверка запуска в форме с несколькими разделами и неизвестными полями ввода
Я пытаюсь проверить сложную форму, и под комплексом я подразумеваю, что форма только одна, но она была разбита на четыре раздела, и я создал простой мастер, чтобы показать их. я используюПроверка 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
это пройдет? Не должен потерпеть неудачу?