Краткое описание: Страница с ~ 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
}
}
});
Чтобы найти правильные элементы 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
}
}
});
Поскольку поля 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
}
}
});
})
Демо: скрипка
$(".dayStop").val()
и $(".dayStart").val()
всегда будут использовать значение первого элемента с классами .dayStop и .dayStart соответственно.
dayStart
из той же формы