angular2 submit form dengan menekan enter tanpa tombol submit

100

Apakah bisa mengirimkan formulir yang tidak memiliki tombol submit (dengan menekan enter) contoh:

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

Jawaban:

77

mungkin Anda menambahkan keypressatau keydownke kolom input dan menetapkan acara ke fungsi yang akan melakukan submit ketika enter diklik

template Anda akan terlihat seperti ini

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

Dan Anda berfungsi di dalam kelas Anda akan terlihat seperti ini

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

Anda juga bisa menambahkan (keyup.enter)="xxxx()"

mendesis
sumber
Ini berfungsi dengan baik jika Anda hanya memiliki fungsi lama biasa yang ingin Anda panggil alih-alih penangan kirim
Scott
3
Pendekatan ini disebutkan di dokumen Angular. angular.io/docs/ts/latest/guide/…
trungk18
Ini adalah satu-satunya cara yang berhasil dalam situasi saya, terima kasih!
switch87
5
Ini harus menjadi jawaban yang diterima. Keanggunan hanya dengan cara yang bisa dicapai Angular. Cemerlang.
Scott Byers
Sebutan baru dalam dokumentasi Angular: angular.io/guide/user-input#key-event-filtering-with-keyenter
Rafael Neto
84

Edit:

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

Untuk menggunakan metode ini, Anda perlu memiliki tombol kirim meskipun tidak ditampilkan "Terima kasih atas jawaban Toolkit "

Jawaban Lama:

Ya, persis seperti yang Anda menulisnya, kecuali nama acara adalah (submit)bukan (ngSubmit):

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

Abdulrahman Alsoghayer
sumber
2
bisakah Anda menyediakan alat pemukul? karena tidak berhasil
Toolkit
Gunakan "visibilitas: tersembunyi;" sebagai gantinya. The "display: none;" bekerja di chrome, tetapi tidak di safari.
Moulde
Ini harus digunakan, kecuali bahwa tombol kirim tidak boleh disembunyikan tetapi terlihat karena beberapa orang akan mencari tombol itu dan tidak mau repot-repot menekan enter.
Impulse The Fox
31

Saya lebih suka (keydown.enter)="mySubmit()"karena tidak akan ditambahkan jeda baris jika kursor berada di suatu tempat <textarea>tetapi tidak di ujungnya.

Martin Schneider
sumber
1
Ini harus menjadi solusi yang diterima - jauh lebih bersih
rhysclay
27

Cara ini jauh lebih sederhana ...

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

</form>
Clayton KN Passos
sumber
2
Terima kasih, lebih mudah dari yang saya harapkan. Dipecahkan seperti ini: <input type = "text" class = "form-control" [(ngModel)] = "object.LanguageTableData" (blur) = "mymethod ()" (keyup.enter) = "mymethod ()" / >
Loutocký
1
jauh lebih mudah dengan cara ini daripada mengirim fungsi dengan $ event. Terima kasih!
Helen
1
jauh lebih baik. tidak ada tombol atau js tersembunyi. Cara sudut murni
RenanSS
10

Selalu gunakan keydown.enter sebagai ganti keyup.enter untuk menghindari keterlambatan.

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

dan berfungsi di dalam component.ts

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

tambahkan ini di dalam tag masukan Anda

<input type="text" (keyup.enter)="yourMethod()" />
Abdus Salam Azad
sumber
terima kasih saudara. Saya lebih suka opsi ini daripada jawaban yang dipilih.
Santosh
8
(keyup.enter)="methodname()"

ini seharusnya berfungsi dan telah disebutkan dalam banyak jawaban, namun itu harus ada di tag formulir dan bukan di tombol.

Santosh Kadam
sumber
7

menambahkan tombol kirim tak terlihat melakukan trik

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

Toolkit
sumber
Gunakan "visibilitas: tersembunyi;" sebagai gantinya. Di atas berfungsi di chrome, tetapi tidak di safari.
Moulde
7

Cukup tambahkan (keyup.enter)="yourFunction()"

Saurabh Agrawal
sumber
4

Mudah-mudahan ini bisa membantu seseorang: entah kenapa saya tidak bisa lacak karena kekurangan waktu, jika Anda memiliki bentuk seperti:

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

ketika Anda menekan Entertombol, clearFormfungsi dipanggil, meskipun perilaku yang diharapkan adalah memanggil doSubmitfungsi. Mengubah Cleartombol menjadi <a>tag memecahkan masalah bagi saya. Saya masih ingin tahu apakah itu diharapkan atau tidak. Sepertinya membingungkan saya

Andrea Gherardi
sumber
8
Untuk menghindarinya, Anda telah menentukan type = "button" untuk tombol Hapus
radio_head
2

Jika Anda ingin memasukkan keduanya lebih sederhana dari apa yang saya lihat di sini, Anda dapat melakukannya hanya dengan memasukkan tombol Anda di dalam formulir.

Contoh dengan fungsi mengirim pesan:

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

Anda dapat memilih antara mengklik tombol atau menekan tombol enter.

Emerica
sumber
1

Jika Anda ingin memasukkan keduanya - terima saat masuk dan terima saat klik lalu lakukan -

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

sumber