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.