当表单与AngularJS无效时,禁用提交按钮

ali*_*ali 171 forms button disabled-control angularjs

我的表格是这样的:

<form name="myForm">
    <input name="myText" type="text" ng-model="mytext" required />
    <button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,如果输入为空,则按钮被禁用但在包含文本时不会更改回启用状态.我怎样才能使它工作?

Ben*_*esh 332

您需要使用表单的名称以及ng-disabled:这是关于Plunker的演示

<form name="myForm">
    <input name="myText" type="text" ng-model="mytext" required />
    <button ng-disabled="myForm.$invalid">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)

  • @BenLesh,如果“提交”按钮不在我的表单内怎么办,并且如果表单无效,我仍然必须禁用它。 (2认同)

wvd*_*vdz 32

添加到这个答案.我刚刚发现如果你在表单名称(Angular 1.3)中使用连字符,它也会崩溃:

因此,这将工作:

<form name="my-form">
    <input name="myText" type="text" ng-model="mytext" required />
    <button ng-disabled="my-form.$invalid">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 作为一个经验法则,所有类似表达式的js都会识别camelcase形式的对象,而dash则用于类似html的语法 (7认同)
  • 是的,对于任何AngularJS表单验证,表单名称应该是驼峰式的. (3认同)
  • 在上面的例子中,我相信`myForm.$ invalid`应该仍然有效,所以在你的情况下,我认为`my_formset_name0.$ invalid`应该可行. (2认同)

Iva*_*kiy 29

选择的响应是正确的,但像我这样的人,可能会遇到异步验证问题,并向服务器端发送请求 - 在给定的请求处理期间,按钮不会被禁用,因此按钮将闪烁,这对用户来说看起来很奇怪.

要使其无效,您只需处理表单的$ pending状态:

<form name="myForm">
  <input name="myText" type="text" ng-model="mytext" required />
  <button ng-disabled="myForm.$invalid || myForm.$pending">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您使用的是反应式表格,则可以使用以下方法:

<button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button>
Run Code Online (Sandbox Code Playgroud)

  • 尽管这是对“Angular”的有效建议,但此答案对“AngularJS”无效。即,`(click)` 和 `[disabled]` 不是有效的 AngularJS 代码,Reactive Forms 也不是 AngularJS 框架的一部分。_“Angular 是今天和明天的 Angular 的名称。AngularJS 是所有 v1.x 版本的 Angular 的名称”_ https://angular.io/guide/ajs-quick-reference (2认同)