阻止下一步按钮转到下一页

时间:2018-05-01 07:57:48

标签: javascript validation wizard

我在MVC中遇到了向导验证的问题。我希望代码在跳转到下一页之前检查字段是否为空。我在我的项目中使用this wizard。这是我的.cshtml页面:

<div class="col-sm-12 text-right bottom-prev-next">
    <button id="vnBtnNext" type="button" class="btn btn-primary btn-sm btn-next" data-attr="{{currentStepIndex==steps.length-1?currentStepIndex:currentStepIndex}}">{{currentStepIndex==steps.length-1?'Finish':'Next'}}<i class="fa fa-arrow-right"></i></button>
    <button id="vnBtnPrev" type="button" class="btn btn-primary btn-sm btn-prev pull-left"><i class="fa fa-arrow-left"></i>Prev</button>
</div>

<script type="text/javascript">

$(document).on("click", "#vnBtnNext", function (e) {

    if ($('#vnBtnNext').html().indexOf("Next") != -1 && $('#vnBtnNext').attr('data-attr') == "1") {
        if ($('input[name=FirstName]').val() == "") {

            $("input[name=FirstName]").css("background-color", "lightyellow");
            $('input[name=FirstName]').focus();
            alert('Please enter the First Name in English');
        }
    }
    else {
        return;
    }
});
 </script>

2 个答案:

答案 0 :(得分:0)

您仍然要访问下一页的原因是遵循向导库中的代码行。

//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);

我想这足以让你开始。

修改 有许多方法可以通过扩展此库来进行此更改,该库将为每个步骤采用验证器。或者您可以修改行号。 74包括你的验证器。指定的repo允许您自由使用和编辑源代码。以下是一个例子

$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()。我不知道角度是如何表现的,但你也可以试试这个。

答案 1 :(得分:0)

防止JavaScript中的事件

您应该使用 e.preventDefault();

else子句

中添加此代码
e.preventDefault();
return false;