Saya memiliki javascript berikut di halaman saya yang sepertinya tidak berfungsi.
$('form').bind("keypress", function(e) {
if (e.keyCode == 13) {
e.preventDefault();
return false;
}
});
Saya ingin menonaktifkan pengiriman formulir saat masuk, atau lebih baik lagi, untuk memanggil formulir ajax saya. Salah satu solusi dapat diterima tetapi kode saya termasuk di atas tidak mencegah formulir mengirimkan.
javascript
jquery
forms
form-submit
Adam Levitt
sumber
sumber
Jawaban:
Jika
keyCode
tidak tertangkap, tangkapwhich
:EDIT: ketinggalan, lebih baik digunakan
keyup
daripadakeypress
EDIT 2: Seperti di beberapa versi Firefox yang lebih baru pengiriman formulir tidak dicegah, lebih aman untuk menambahkan acara penekanan tombol ke formulir juga. Juga tidak berfungsi (lagi?) Dengan hanya mengikat acara ke bentuk "nama" tetapi hanya ke id formulir. Karena itu saya membuatnya lebih jelas dengan mengubah contoh kode dengan tepat.
EDIT 3: Diubah
bind()
menjadion()
sumber
e.which
, jadi Anda tidak perlu mengujinyae.keyCode
, tetapi memberi +1 untuk kemungkinan penyebab masalah ini.return false;
ini?e.preventDefault();
tampaknya luar biasakeyCode === 13 && !$(e.target).is('textarea')
Biasanya formulir dikirimkan Enterketika Anda memiliki fokus pada elemen input.
Kami dapat menonaktifkan Enterkunci (kode
13
) pada elemen input dalam formulir:DEMO: http://jsfiddle.net/bnx96/325/
sumber
textareas
dalam bentuk yang sama. Menggunakan$("form input")
alih-alih$("form :input")
tampaknya untuk memperbaikinya. DEMO: jsfiddle.net/bnx96/279Bahkan lebih pendek:
sumber
function(e) {e.preventDefault();}
karena nilai pengembalian di penangan acara tidak digunakan lagi: stackoverflow.com/a/20045473/601386Enter
dan bukan tentang menonaktifkan pengiriman formulir denganSubmit
tombol.onClick
acara jQuery untuk memvalidasi formulir, dan masih mengirimkan menggunakan jQuery. Dengan kata lain, ada beberapa kasus di mana Anda hanya ingin mengirim melalui javascript / jQuery. Meskipun Anda masih dapat menggunakan AJAX dengan solusi ini, ia menonaktifkan fungsionalitas dasarsubmit
metode ini.which
docs.sumber
Solusi ini berfungsi pada semua formulir di situs web (juga pada formulir yang disisipkan dengan ajax), mencegah hanya Memasukkan ke dalam teks input. Tempatkan dalam fungsi siap dokumen, dan lupakan masalah ini seumur hidup.
sumber
Sebagian besar jawaban di atas akan mencegah pengguna menambahkan baris baru di bidang textarea. Jika ini adalah sesuatu yang ingin Anda hindari, Anda dapat mengecualikan kasus khusus ini dengan memeriksa elemen yang saat ini memiliki fokus:
sumber
Kerja keras karena harus menangkap dan menguji setiap keystroke untuk kunci ENTER benar-benar mengganggu saya, jadi solusi saya bergantung pada perilaku browser berikut:
Menekan ENTER akan memicu acara klik pada tombol kirim (diuji di IE11, Chrome 38, FF 31) ** (ref: http://mattsnider.com/how-forms-submit-when-pressing-enter/ )
Jadi solusi saya adalah menghapus tombol submit standar (yaitu
<input type="submit">
) sehingga perilaku di atas gagal karena tidak ada tombol submit untuk secara ajaib klik ketika ENTER ditekan. Sebagai gantinya, saya menggunakan penangan klik jQuery pada tombol biasa untuk mengirimkan formulir melalui.submit()
metode jQuery .Demo: http://codepen.io/anon/pen/fxeyv?editors=101
** perilaku ini tidak berlaku jika formulir hanya memiliki 1 bidang input dan bidang itu adalah input 'teks'; dalam hal ini formulir akan dikirimkan pada tombol ENTER bahkan jika tidak ada tombol kirim hadir di markup HTML (misalnya bidang pencarian). Ini telah menjadi perilaku browser standar sejak 90-an.
sumber
jika Anda hanya ingin menonaktifkan tombol kirim saat masuk dan kirim juga gunakan acara pengiriman formulir
Anda dapat mengganti "kembali salah" dengan fungsi panggilan ke JS yang akan melakukan apa pun yang diperlukan dan juga mengirimkan formulir sebagai langkah terakhir.
sumber
Anda dapat melakukan ini dengan sempurna dalam Javascript murni, sederhana dan tidak perlu pustaka. Ini dia jawaban terinci saya untuk topik serupa: Menonaktifkan tombol enter untuk formulir
Singkatnya, ini kodenya:
sumber
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Dengan kode yang ditentukan itu akan memungkinkan untuk mengirimkan formulir jika radio atau kotak centang difokuskan.Saya tidak tahu apakah Anda sudah menyelesaikan masalah ini, atau siapa pun yang mencoba menyelesaikan ini sekarang, tetapi, inilah solusi saya untuk ini!
sumber
Cara sederhananya adalah mengubah jenis tombol ke tombol - dalam html dan kemudian menambahkan acara di js ...
Ubah dari ini:
Untuk
Dan di js atau jquery tambahkan:
sumber
Kode berikut akan meniadakan kunci enter dari yang digunakan untuk mengirimkan formulir, tetapi masih akan memungkinkan Anda untuk menggunakan kunci enter dalam textarea. Anda dapat mengeditnya lebih lanjut tergantung kebutuhan Anda.
sumber
Di firefox, ketika Anda input dan tekan enter, itu akan mengirimkan formulir atas itu. Solusinya ada di form kirim akan tambahkan ini:
sumber
3 tahun kemudian dan tidak ada satu orang pun yang menjawab pertanyaan ini sepenuhnya.
Penanya ingin membatalkan pengiriman formulir default dan memanggil Ajax mereka sendiri. Ini adalah permintaan sederhana dengan solusi sederhana. Tidak perlu mencegat setiap karakter yang dimasukkan ke dalam setiap input.
Dengan asumsi formulir memiliki tombol kirim, apakah a
<button id="save-form">
atau a<input id="save-form" type="submit">
, lakukan:sumber
Saya dengar
which
tidak disarankan, jadi ubah jawaban berperingkat terbaik untuk ini.ref. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which
sumber
Ketika file selesai (memuat selesai), skrip mendeteksi setiap peristiwa untuk kunci "Entri" dan ia menonaktifkan acara di belakang.
sumber
Solusi Lengkap dalam JavaScript untuk semua browser
Kode di atas dan sebagian besar solusinya sempurna. Namun, saya pikir yang paling disukai adalah "jawaban singkat" yang tidak lengkap.
Jadi, inilah jawaban keseluruhannya. dalam JavaScript dengan Dukungan asli untuk IE 7 juga.
Solusi ini sekarang akan mencegah pengguna dari mengirimkan menggunakan tombol enter dan tidak akan memuat ulang halaman, atau membawa Anda ke bagian atas halaman, jika formulir Anda berada di suatu tempat di bawah ini.
sumber
Bagaimana dengan ini:
Ini harus menonaktifkan semua formulir dengan mengirimkan tombol di aplikasi Anda.
sumber