Sudut mendukung ini di luar kotak. Sudahkah Anda mencoba ngSubmit pada elemen formulir Anda?
<form ng-submit="myFunc()" ng-controller="mycontroller">
<input type="text" ng-model="name" />
<br />
<input type="text" ng-model="email" />
</form>
EDIT: Per komentar tentang tombol kirim, lihat Mengirimkan formulir dengan menekan enter tanpa tombol kirim yang memberikan solusi:
<input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;"/>
Jika Anda tidak menyukai solusi tombol kirim tersembunyi, Anda harus mengikat fungsi pengontrol ke acara Enter penekanan tombol atau keyup. Ini biasanya memerlukan arahan khusus, tetapi pustaka AngularUI sudah menyiapkan solusi penekanan tombol yang bagus. Lihat http://angular-ui.github.com/
Setelah menambahkan lib angularUI, kode Anda akan menjadi seperti:
<form ui-keypress="{13:'myFunc($event)'}">
... input fields ...
</form>
atau Anda dapat mengikat tombol masuk ke setiap bidang individual.
Juga, lihat pertanyaan SO ini untuk membuat arahan keypres sederhana:
Bagaimana cara mendeteksi onKeyUp di AngularJS?
EDIT (2014-08-28): Pada saat jawaban ini ditulis, ng-keypress / ng-keyup / ng-keydown tidak ada sebagai arahan asli di AngularJS. Dalam komentar di bawah ini @ darlan-alves memiliki solusi yang cukup bagus dengan:
<input ng-keyup="$event.keyCode == 13 && myFunc()"... />
ng-submit="join()"
pengontrol registrasi yang memiliki$scope.join = function() {...}
dan mengubah nama fungsi untukfoo()
mendapatkan pengiriman tombol enter bekerja lagi.ng-keyup="$event.keyCode == 13 && myFunc()"
Sungguh luar biasa :)Jika Anda ingin memanggil fungsi tanpa formulir, Anda dapat menggunakan arahan ngEnter saya:
Javascript :
HTML :
Saya mengirimkan arahan luar biasa kepada orang lain di twitter dan akun utama saya .
sumber
keydown
dankeypress
acara tanpa koma untuk membatasi keduanya berarti keduanya dapat menyala secara bersamaan. Ini kemungkinan akan menghasilkan $ rootScope: kesalahan inprog. Menambahkan koma di antara mereka menciptakan disjungtif, dan memastikan hanya siklus $ digest yang terjadi. Tidak dapat menerapkan hasil edit karena hanya satu karakter.Jika Anda hanya memiliki satu input, Anda dapat menggunakan tag formulir.
Jika Anda memiliki lebih dari satu input, atau tidak ingin menggunakan tag formulir, atau ingin melampirkan fungsionalitas tombol-enter ke bidang tertentu, Anda bisa memasukkannya ke input tertentu sebagai berikut:
sumber
Saya menginginkan sesuatu yang sedikit lebih extensible / semantik daripada jawaban yang diberikan jadi saya menulis arahan yang mengambil objek javascript dengan cara yang mirip dengan built-in
ngClass
:HTML
Nilai-nilai objek dievaluasi dalam konteks ruang lingkup direktif - pastikan mereka terbungkus dalam tanda kutip tunggal jika tidak semua fungsi akan dieksekusi ketika direktif dimuat (!)
Jadi misalnya:
esc : 'clear()'
bukannyaesc : clear()
Javascript
sumber
'vm.doTheThing("myVar")'
Pendekatan lain akan menggunakan ng-penekanan tombol,
Kirim masukan tentang menekan Enter dengan AngularJS - jsfiddle
sumber
Sangat bagus, bersih dan arahan sederhana dengan dukungan shift + enter:
sumber
Jika Anda ingin validasi data juga
Tambahan penting di sini adalah
$loginForm.$valid
yang akan memvalidasi formulir sebelum menjalankan fungsi. Anda harus menambahkan atribut lain untuk validasi yang berada di luar cakupan pertanyaan ini.Semoga berhasil.
sumber
Hanya ingin menunjukkan bahwa dalam kasus memiliki tombol kirim tersembunyi, Anda bisa menggunakan arahan ngShow dan mengaturnya ke false seperti:
HTML
sumber
<button ng-show="false"></button>
bahkan lebih pendek. Tidak perlu mengatur nilai tombol yang tidak terlihat.type="submit"
... Saya kira nilai bisa diabaikan tetapi saya percaya yang pertama diperlukan.Gunakan ng-kirim dan bungkus kedua input dalam tag formulir terpisah:
Membungkus setiap bidang input dalam bentuknya sendiri memungkinkan ENTER untuk meminta pengiriman pada salah satu formulir. Jika Anda menggunakan satu tag formulir untuk keduanya, Anda harus memasukkan tombol kirim.
sumber
Akan sedikit lebih rapi menggunakan kelas CSS bukannya mengulang gaya inline.
CSS
HTML
sumber
FWIW - Ini adalah arahan yang saya gunakan untuk modal dasar konfirmasi / peringatan bootstrap, tanpa perlu a
<form>
(cukup alihkan tindakan klik jQuery untuk apa pun yang Anda suka, dan tambahkan
data-easy-dismiss
ke tag modal Anda)sumber