【问题标题】:ng-submit doesn't prevent submissionng-submit 不会阻止提交
【发布时间】:2014-07-02 10:27:39
【问题描述】:

关于 SO 有很多类似的问题。我已经经历了很多,但没有发现我的问题。

我有一个使用ng-submit 的表单。不幸的是,即使表单无效,按 Enter 或单击提交也有效。调用ng-submit 方法。

CodePen 示例:http://codepen.io/calendee/pen/tgFhq

<form name="testForm" novalidate ng-submit="submit()">

  <label for="firstname">First Name:</label>
  <input type="text" name="firstname" ng-model="data.firstname" required="true" ng-minlength="4" ng-maxlength="10">

    <div class="errors">
      <p>firstname Errors:</p>
      <p ng-show="testForm.firstname.$error.required">firstname is required</p>
      <p ng-show="testForm.firstname.$error.minlength">firstname is too short</p>
      <p ng-show="testForm.firstname.$error.maxlength">firstname is too long</p>
    </div>              

    <label for="lastname">Last Name:</label>
      <input type="text" name="lastname" ng-model="data.lastname" ng-required="true" ng-minlength="4" ng-maxlength="10">

    <div class="errors">
      <p>lastname Errors:</p>
      <p ng-show="testForm.lastname.$error.required">lastname is required</p>
      <p ng-show="testForm.lastname.$error.minlength">lastname is too short</p>
      <p ng-show="testForm.lastname.$error.maxlength">lastname is too long</p>
    </div>              


  <button class="button button-balanced" type="submit">Submit</button>

</form>

如果我更改表单ng-form,即使表单有效,提交事件也根本不起作用。

CodePen 示例:http://codepen.io/calendee/pen/imJdc

<ng-form name="testForm" novalidate ng-submit="submit()">

  <label for="firstname">First Name:</label>
  <input type="text" name="firstname" ng-model="data.firstname" required="true" ng-minlength="4" ng-maxlength="10">

    <div class="errors">
      <p>firstname Errors:</p>
      <p ng-show="testForm.firstname.$error.required">firstname is required</p>
      <p ng-show="testForm.firstname.$error.minlength">firstname is too short</p>
      <p ng-show="testForm.firstname.$error.maxlength">firstname is too long</p>
    </div>              

    <label for="lastname">Last Name:</label>
      <input type="text" name="lastname" ng-model="data.lastname" ng-required="true" ng-minlength="4" ng-maxlength="10">

    <div class="errors">
      <p>lastname Errors:</p>
      <p ng-show="testForm.lastname.$error.required">lastname is required</p>
      <p ng-show="testForm.lastname.$error.minlength">lastname is too short</p>
      <p ng-show="testForm.lastname.$error.maxlength">lastname is too long</p>
    </div>              


  <button class="button button-balanced" type="submit">Submit</button>

</ng-form>

有人对我在这里做错了什么有建议吗?

【问题讨论】:

标签: forms angularjs validation


【解决方案1】:

您可以使用内置属性$valid:

<form name="testForm" novalidate ng-submit="testForm.$valid && submit()">

仅当testForm.$valid 为真时才调用提交函数。

我在本教程中学到了它:https://www.codeschool.com/courses/shaping-up-with-angular-js

【讨论】:

  • 谢谢! +1
【解决方案2】:

当您使用ng-submit 时,表单不会直接提交到服务器。在submit() 方法中,您可以决定是提交表单信息到服务器还是拒绝提交。检查表单输入控件的有效性,然后将信息发送到服务器端。

【讨论】:

  • 我认为情况并非如此。它与提交到服务器无关。如果表单无效,则根本不应该调用ng-submit 中的方法。
  • 信不信由你,ng-submit 阻止了提交按钮的默认操作。 docs.angularjs.org/api/ng/directive/ngSubmit。添加一个 if 语句来检查表单输入控件的有效性,然后执行您的任务。
  • 很奇怪,我只记得这个工作方式不同。我想我完全错了。感谢您的澄清
  • @Alborz 你没有完全阅读文档,它说它阻止默认操作 IF 表单不包含操作、数据操作或 x 操作属性。
猜你喜欢
  • 2018-11-07
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2016-05-16
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多