【问题标题】:How to fire a custom event to trigger partial form validation?如何触发自定义事件以触发部分表单验证?
【发布时间】:2014-08-27 14:41:41
【问题描述】:

我正在尝试通过单击名为“下一步”的按钮逐步验证我的表单。 有没有办法触发自定义事件来触发部分表单验证? 类似的东西:

<input type="text" id="age-id" name="age" 
  ng-model-options="{updateOn: 'ValidateStepOne'}" 
  min="18"
  max="99"
  ng-model="data.age"
>

在按钮上触发 onclick 事件:

$scope.validate = function() {
    $rootScope.$broadcast('ValidateStepOne');
};

任何帮助将不胜感激。 亲切的问候

奥利弗KK

【问题讨论】:

  • 更多代码将有助于更多地理解布局。但是如果你有你的 UI 设置,就像我想的那样,你可以让每个步骤都有自己的表单,所以按钮提交会导致该步骤的表单验证。
  • 感谢您的回复。步骤的验证是发布公式之前的预验证。不能将表单分成子表单。

标签: javascript angularjs validation angular-ngmodel


【解决方案1】:

我将巨大的表单拆分为子表单(感谢@fiskers7),这非常方便。 验证通过使用custom trigger 点击 next 按钮验证当前步骤。 required 验证器和其他使用的验证器将在触发自定义提交事件时执行。

    <form id="form1" ng-submit="validate(1)" ng-model-options="{ updateOn: 'submit' }" novalidate>
      <input type="text" ng-model="name" required>
      <span ng-show="form1.$submitted && form1['name'].$error.required">Name is required!</span>
      <input type="submit" value="next">
    </form>

    <form id="form2" ng-submit="validate(2)" ng-model-options="{ updateOn: 'submit' }" novalidate>
      <input type="text" ng-model="surename" required> 
      <span ng-show="form2.$submitted && form1['surename'].$error.required">Name is required!</span>
      <input type="submit" value="next">
    </form>

控制器内的验证函数submit如下所示:

 $scope.validate = function(num) {
    $scope['form' + num].$setSubmitted(true);
    if (!$scope['form' + num].$valid) {
      $scope.scrollToTop();
    } else if (num < $scope.maxSteps) {
      $scope.next(num + 1);
    } else {
      $scope.submit();
    }
  }

查看 AngularJS 文档了解更多详情: https://docs.angularjs.org/guide/forms

亲切的问候

奥利弗KK

【讨论】:

    【解决方案2】:

    您可以将表单分成几部分,使用ng-if 来决定是否显示它们。

    <form action="" name="myForm">
        <div ng-if="step == 1">
            <input type="text" required="true" name="input1" ng-model="inputVal1"/>
        </div>
        <div ng-if="step == 2">
            <input type="text" required="true" name="input2" ng-model="inputVal2"/>
        </div>            
    </form>
    

    example

    【讨论】:

    • 感谢您的回答。一开始我是按照你的建议做的。但事实证明,将巨大的形式分成较小的形式会更好。这样做的关键是,每个表单都有自己的提交按钮,这使得验证非常简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多