Причина, по которой вы все еще переходите на следующую страницу, заключается в следовании строке кодов в вашей библиотеке мастера.
//line no. 29-33
var btnNexts = document.querySelectorAll( '.btn-next' );
for (var j = 0; j < btnNexts.length; ++j) {
angular.element(btnNexts[j]).attr('ng-click','showNextStep()');
angular.element(btnNexts[j]).attr('ng-disabled', '!hasNext() && !isFinish()');
}
и showNextStep
следующие.
$scope.showNextStep = function(){$scope.toggleSteps($scope.currentStepIndex + 1, true);}
Вам необходимо изменить реализацию showNextStep
таким образом, чтобы она не переключалась до тех пор, пока не пройдут все проверки. По сути, я говорю, что вам нужно выполнить следующую строку условно, если и только если все проверки пройдены на текущем шаге.
//line no. 74
$scope.toggleSteps($scope.currentStepIndex + 1, true);
Полагаю, этого достаточно, чтобы вы начали.
EDIT
Есть несколько способов сделать это изменение, расширив библиотеку, которая будет использовать валидатор для каждого шага Или вы можете изменить строку №. 74, чтобы включить ваш валидатор. Указанный репозиторий позволяет свободно использовать и редактировать исходный код. Ниже приведен пример
$scope.showNextStep = function(){
var validationPassed = true; // make validator for each step and call that validor based on step which will return true/false or if you want sophistication then let them return object with validation message.
// This is proof of concept and needs to be in function.
if ($('input[name=FirstName]').val() == "") {
$("input[name=FirstName]").css("background-color", "lightyellow");
$('input[name=FirstName]').focus();
alert('Please enter the First Name in English');
validationPassed = false;
}
if(validationPassed)
$scope.toggleSteps($scope.currentStepIndex + 1, true);
else
//Do not toggle step and show validation message.
}
Я думаю, вы поняли.
Или вы можете попробовать e.preventDefault () и e.stopPropogation () в своем пользовательском обработчике событий, который вы написали в своем вопросе. Я не знаю, как угловатые ведут себя с этим, но вы также можете попробовать это.