通过按Enter而不提交按钮来提交angular2提交表单


99

是否可以提交没有提交按钮的表单(通过按Enter键)示例:

<form [ngFormModel]="xxx" (ngSubmit)="xxxx()">
  <input [(ngModel)]="lxxR"   ngControl="xxxxx"/>
</form

Answers:


77

也许您在输入字段中添加keypresskeydown并将事件分配给将在单击enter时执行提交的功能

您的模板如下所示

<form (keydown)="keyDownFunction($event)">
  <input type="text" />
</form

而且您在类中的功能如下所示

keyDownFunction(event) {
  if (event.keyCode === 13) {
    alert('you just pressed the enter key');
    // rest of your code
  }
}

206

您也可以添加 (keyup.enter)="xxxx()"


如果您只是想调用一个普通的旧函数而不是提交处理程序,则此方法非常有用
Scott R. Frost

3
Angular文档中提到了这种方法。angular.io/docs/ts/latest/guide/…–
trungk18

这是在我的情况下唯一有效的方法,谢谢!
switch87 '18

5
这应该是公认的答案。只有Angular才能实现的优雅。辉煌。
Scott Byers


84

编辑:

  <form (submit)="submit()" >
    <input />
    <button type="submit" style="display:none">hidden submit</button>
  </form>

为了使用此方法,即使未显示“感谢工具包的答案 ” ,也需要有一个提交按钮。

旧答案:

是的,与您编写的完全一样,只是事件名称(submit)不是(ngSubmit)

<form [ngFormModel]="xxx" (submit)="xxxx()">
  <input [(ngModel)]="lxxR"   ngControl="xxxxx"/>
</form>


2
你能提供一个矮人吗?因为它不起作用
Toolkit

使用“可见性:隐藏;” 代替。“ display:none;” 在Chrome中工作,但在Safari中工作。
莫尔德'18

应该使用此按钮,除了不应隐藏而是显示提交按钮,因为有些人会寻找该按钮并且不会费心按下Enter键。
冲动狐狸

31

我更喜欢,(keydown.enter)="mySubmit()"因为如果光标位于内<textarea>但不在其末端,则不会添加换行符。


1
这应该是公认的解决方案-更清洁
Rhysclay

27

这种方法很简单...

<form [formGroup]="form" (keyup.enter)="yourMethod(form.value)">

</form>

2
谢谢,这比我期望的要容易。像这样解决:<input type =“ text” class =“ form-control” [(ngModel)] =“ object.LanguageTableData”(blur)=“ mymethod()”(keyup.enter)=“ mymethod()” / >
Loutocký

1
这样比发送带有$ event的函数要容易得多。谢谢!
海伦

1
好多了。没有隐藏的按钮或js。纯角度方式
RenanSS

10

始终使用keydown.enter而不是keyup.enter以避免滞后。

<textarea [(ngModel)]="textValue" (keydown.enter)="sendMessage();false" ></textarea>

并在component.ts内部起作用

 textValue : string = '';  
 sendMessage() {
    console.log(this.textValue);
    this.textValue = '';
  }


7

添加一个不可见的提交按钮就可以了

<input type="submit" style="display: none;">


使用“可见性:隐藏;” 代替。以上内容适用于Chrome浏览器,但不适用于野生动物园。
莫尔德'18



4

希望这可以对某人有所帮助:由于某种原因,我缺少时间,因此无法跟踪,如果您的表单如下:

<form (ngSubmit)="doSubmit($event)">
  <button (click)="clearForm()">Clear</button>
  <button type="submit">Submit</button>
</form>

当您按下Enter按钮时,将clearForm调用该函数,即使预期的行为是调用该doSubmit函数。将Clear按钮更改为<a>标签可以为我解决问题。我仍然想知道这是否是预期的。似乎让我感到困惑


8
为了避免这种情况,您必须为清除按钮指定type =“ button”
radio_head '17

2

如果你想包括两个比我在这里看到的更简单的方法,则只需在窗体中包含按钮即可。

函数发送消息的示例:

                <form>
                    <mat-form-field> <!-- In my case I'm using material design -->
                        <input matInput #message maxlength="256" placeholder="Message">
                    </mat-form-field>
                    <button (click)="addMessage(message.value)">Send message
                    </button>
                </form>

您可以选择单击按钮还是按Enter键。


1

如果您想同时包含这两个内容-输入时接受,单击时接受,然后执行-

 <div class="form-group">
    <input class="form-control"   type="text" 
    name="search" placeholder="Enter Search Text"
              [(ngModel)]="filterdata"  
           (keyup.enter)="searchByText(filterdata)">
  <button type="submit"  
          (click)="searchByText(filterdata)" >

  </div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.