angle2 gửi biểu mẫu bằng cách nhấn nút enter mà không gửi


100

Có thể gửi biểu mẫu không có nút gửi (bằng cách nhấn enter) không, ví dụ:

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

Câu trả lời:


77

có thể bạn thêm keypresshoặc keydownvào các trường đầu vào và gán sự kiện vào chức năng sẽ thực hiện gửi khi nhấn enter

mẫu của bạn sẽ giống như thế này

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

Và bạn hoạt động bên trong lớp của bạn sẽ trông như thế này

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

206

Bạn cũng có thể thêm (keyup.enter)="xxxx()"


Này hoạt động tuyệt vời nếu bạn chỉ có một chức năng đồng bằng cũ bạn muốn gọi thay vì một handler nộp
Scott R. Frost

3
Cách tiếp cận này đã được đề cập trên Angular docs. angle.io/docs/ts/latest/guide/…
trungk18

Đây là cách duy nhất nó hoạt động trong tình huống của tôi, cảm ơn!
switch87

5
Đây phải là câu trả lời được chấp nhận. Sự sang trọng chỉ theo cách Angular có thể đạt được. Xuất sắc.
Scott Byers

Đề cập mới trong tài liệu Angular: angle.io/guide/user-input#key-event-filtering-with-keyenter
Rafael Neto

84

Biên tập:

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

Để sử dụng phương pháp này, bạn cần có nút gửi ngay cả khi nút đó không được hiển thị "Cảm ơn câu trả lời của Bộ công cụ "

Câu trả lời cũ:

Có, chính xác như bạn đã viết, ngoại trừ tên sự kiện (submit)thay vì (ngSubmit):

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


2
bạn có thể vui lòng cung cấp một plunker? bởi vì nó không hoạt động
Bộ công cụ

Sử dụng "khả năng hiển thị: ẩn;" thay thế. "Display: none;" hoạt động trong chrome, nhưng không hoạt động trong safari.
Moulde

Điều này nên được sử dụng, ngoại trừ việc nút gửi không được ẩn nhưng có thể nhìn thấy vì một số người sẽ tìm kiếm nút đó và không thèm nhấn enter.
Impulse The Fox

31

Tôi thích hơn (keydown.enter)="mySubmit()"vì sẽ không có thêm dấu ngắt dòng nếu con trỏ ở đâu đó trong <textarea>nhưng không phải ở cuối.


1
Đây phải là giải pháp được chấp nhận - sạch hơn nhiều
rhysclay

27

Cách này rất đơn giản ...

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

</form>

2
Cảm ơn bạn, nó là dễ dàng hơn khi tôi mong đợi. Đã giải quyết như sau: <input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData" (mờ) = "mymethod ()" (keyup.enter) = "mymethod ()" / >
Loutocký

1
Cách này dễ dàng hơn nhiều so với việc gửi một hàm với $ event. Cảm ơn bạn!
Helen

1
tốt hơn nhiều. không có nút ẩn hoặc js. Cách góc cạnh tinh khiết
RenanSS

10

Luôn sử dụng keydown.enter thay vì keyup.enter để tránh bị lag.

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

và hoạt động bên trong component.ts

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

10

thêm cái này vào bên trong thẻ đầu vào của bạn

<input type="text" (keyup.enter)="yourMethod()" />

Cám ơn anh trai. Tôi thích tùy chọn này hơn câu trả lời đã chọn.
Santosh

8
(keyup.enter)="methodname()"

điều này sẽ hoạt động và đã được đề cập trong nhiều câu trả lời, tuy nhiên điều đó sẽ xuất hiện trên thẻ biểu mẫu chứ không phải trên nút.


7

thêm một nút gửi ẩn không thực hiện được

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


Sử dụng "khả năng hiển thị: ẩn;" thay thế. Ở trên hoạt động trong chrome, nhưng không hoạt động trong safari.
Moulde


4

Hy vọng rằng điều này có thể giúp ích cho ai đó: vì lý do nào đó tôi không thể theo dõi vì thiếu thời gian, nếu bạn có biểu mẫu như:

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

khi bạn nhấn Enternút, clearFormhàm được gọi, mặc dù hành vi mong đợi là gọi doSubmithàm. Thay đổi Clearnút thành <a>thẻ đã giải quyết được vấn đề cho tôi. Tôi vẫn muốn biết nếu điều đó được mong đợi hay không. Có vẻ khó hiểu với tôi


8
inorder để tránh điều đó, bạn đã chỉ định type = "button" cho nút Xóa
radio_head

2

Nếu bạn muốn bao gồm cả hai đơn giản hơn những gì tôi đã thấy ở đây, bạn có thể làm điều đó chỉ bằng cách đưa nút của bạn vào bên trong biểu mẫu.

Ví dụ với chức năng gửi tin nhắn:

                <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>

Bạn có thể chọn giữa nhấp vào nút hoặc nhấn phím enter.


1

Nếu bạn muốn bao gồm cả hai - chấp nhận khi nhập và chấp nhận khi nhấp rồi thực hiện -

 <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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.