Это возможно при использовании функции .element(selector)
, равной validator
. То, что вы собираетесь сделать, это перебрать каждый элемент на активной вкладке и вызвать эту функцию на входе. Это будет запускать проверку каждого элемента по очереди, показывая сообщение проверки.
$(".nexttab").click(function() {
var valid = true;
var i = 0;
var $inputs = $(this).closest("div").find("input");
$inputs.each(function() {
if (!validator.element(this) && valid) {
valid = false;
}
});
if (valid) {
$("#tabs").tabs("select", this.hash);
}
});
Кроме того, вы, вероятно, захотите запустить подобный код, когда пользователь нажимает на вкладку, чтобы перейти к новому набору входных данных, вместо нажатия «Далее».
Вот рабочий пример: http://jsfiddle.net/c2y6r/
Обновление: Вот еще один способ сделать это, отменив событие select
для недопустимых элементов формы:
var validator = $("#myForm").validate();
var tabs = $("#tabs").tabs({
select: function(event, ui) {
var valid = true;
var current = $(this).tabs("option", "selected");
var panelId = $("#tabs ul a").eq(current).attr("href");
$(panelId).find("input").each(function() {
console.log(valid);
if (!validator.element(this) && valid) {
valid = false;
}
});
return valid;
}
});
Однако теперь вам нужно подумать о том, чтобы разрешить пользователю вернуться, когда он ввел недействительные данные на текущей странице. С другой стороны, вы получаете бонус за хранение всего кода проверки внутри одной функции, которая срабатывает, если человек нажимает на вкладку или следующую ссылку.
Пример: http://jsfiddle.net/c2y6r/1/
Обновление 2 , если вы хотите, чтобы люди могли перемещаться назад через интерфейс вкладки:
var tabs = $("#tabs").tabs({
select: function(event, ui) {
var valid = true;
var current = $(this).tabs("option", "selected");
var panelId = $("#tabs ul a").eq(current).attr("href");
if (ui.index > current) {
$(panelId).find("input").each(function() {
console.log(valid);
if (!validator.element(this) && valid) {
valid = false;
}
});
}
return valid;
}
});