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

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

206

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


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


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>


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.


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>

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 = '';
  }

10

tambahkan ini di dalam tag masukan Anda

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

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.


7

menambahkan tombol kirim tak terlihat melakukan trik

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


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


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


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.


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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.