Используется yii2, дополнительная библиотека для gui -
fuelux
Решение такое.
Вешаю калбек на переход на следующий элемент визарда, если заходит в список то останавливаю переход на следующий элемент и запускаю валидацию:
$('#cart-wizard').on('actionclicked.fu.wizard', function(evt, data) {
if(data.direction !== 'next') {return;}
if(data.step === 2) {
Cart.runValidation();
return false;
}
}
Прохожусь по заранее сформированному массиву с айдишниками валидируемых полей и вручную запускаю валидацию через yiiActiveForm.
runValidation: function () {
Cart.profileValidator.validations = [];
var form = $(Cart.profileValidator.formSelector);
for(var key in Cart.profileRows) {
form.yiiActiveForm('validateAttribute', Cart.profileRows[key]);
}
},
Далее вешаю калбек на событие валидации каждого нужного поля формы.
Когда все поля будут провалидированы - проверяю есть ли ошибки и если нет - совершаю переход на следующий шаг визарда:
$(Cart.profileValidator.formSelector).on('afterValidateAttribute', function (event, attribute, messages) {
Cart.profileValidator.validations.push({
id: attribute.id,
message: messages[0]
});
if (Cart.profileRows.length != Cart.profileValidator.validations.length) {
return;
}
var hasError = false;
for(var key in Cart.profileValidator.validations) {
if (Cart.profileValidator.validations[key].message != undefined ) {
hasError = true;
break;
}
}
if (!hasError) {
$('#cart-wizard').wizard('selectedItem', {
step: 3
});
}
});