Bagaimana Anda mencegah ENTERpers kunci mengirim formulir dalam aplikasi berbasis web?
javascript
events
pengguna67722
sumber
sumber
Berikut ini adalah penangan jQuery yang dapat digunakan untuk berhenti memasukkan submit, dan juga menghentikan backspace key -> back. Pasangan (keyCode: selectorString) di objek "keyStop" digunakan untuk mencocokkan node yang tidak boleh mengaktifkan aksi default mereka.
Ingatlah bahwa web harus menjadi tempat yang dapat diakses, dan ini melanggar harapan pengguna papan ketik. Yang mengatakan, dalam kasus saya aplikasi web yang saya kerjakan tidak suka tombol kembali, jadi menonaktifkan pintasan kuncinya adalah OK. Diskusi "harus masuk -> serahkan" itu penting, tetapi tidak terkait dengan pertanyaan aktual yang diajukan.
Ini kodenya, terserah Anda untuk memikirkan aksesibilitas dan mengapa Anda sebenarnya ingin melakukan ini!
sumber
Cukup kembalikan false dari penangan onsubmit
atau jika Anda ingin pawang di tengah
sumber
submit
tombol<form>
dari menerima sama sekali adalah membuang bayi keluar dengan air mandi.sumber
e.preventDefault()
daripadareturn false
akan mencapai tujuan yang sama tetapi memungkinkan acara untuk mencapai penangan dalam elemen induk. Tindakan default (penjumlahan formulir) masih akan dicegahAnda harus memanggil fungsi ini yang hanya akan membatalkan perilaku pengiriman standar formulir. Anda dapat melampirkannya ke bidang input atau acara apa pun.
sumber
Tombol ENTER hanya mengaktifkan tombol kirim default formulir, yang akan menjadi yang pertama
browser menemukan dalam formulir.
Karena itu tidak memiliki tombol kirim, tetapi sesuatu seperti
EDIT : Menanggapi diskusi dalam komentar:
Ini tidak berfungsi jika Anda hanya memiliki satu bidang teks - tetapi mungkin itu adalah perilaku yang diinginkan dalam kasus itu.
Masalah lainnya adalah bahwa ini bergantung pada Javascript untuk mengirimkan formulir. Ini mungkin masalah dari sudut pandang aksesibilitas. Ini dapat diatasi dengan menulis
<input type='button'/>
dengan javascript, dan kemudian meletakkan<input type='submit' />
dalam<noscript>
tag. Kelemahan dari pendekatan ini adalah bahwa untuk browser yang dinonaktifkan dengan javascript Anda akan memiliki pengiriman formulir pada ENTER. Terserah OP untuk memutuskan perilaku apa yang diinginkan dalam kasus ini.Saya tahu tidak ada cara untuk melakukan ini tanpa menggunakan javascript sama sekali.
sumber
Singkatnya jawaban dalam Javascript murni adalah:
Ini hanya menonaktifkan aksi penekanan tombol "Enter" untuk input type = 'text'. Pengunjung masih dapat menggunakan kunci "Enter" di seluruh situs web.
Lihat jawaban terinci saya untuk pertanyaan serupa di sini
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.Semua jawaban yang saya temukan pada subjek ini, di sini atau di posting lain memiliki satu kelemahan dan itu mencegah pemicu perubahan aktual pada elemen formulir juga. Jadi, jika Anda menjalankan solusi ini, acara pertukaran tidak terpicu juga. Untuk mengatasi masalah ini saya memodifikasi kode-kode ini dan mengembangkan kode berikut untuk saya sendiri. Saya harap ini bermanfaat bagi orang lain. Saya memberi kelas ke formulir saya "prevent_auto_submit" dan menambahkan JavaScript berikut:
sumber
Saya selalu melakukannya dengan penekan tombol ditekan seperti di atas di masa lalu, tetapi hari ini menemukan solusi yang lebih sederhana. Tombol enter hanya memicu tombol kirim pertama yang tidak dinonaktifkan pada formulir, jadi sebenarnya yang diperlukan hanyalah mencegat tombol yang mencoba mengirim:
Itu dia. Tekan tombol akan ditangani seperti biasa oleh browser / bidang / dll. Jika logika enter-submit dipicu, maka browser akan menemukan tombol kirim tersembunyi dan memicu itu. Dan penangan javascript kemudian akan mencegah pengiriman.
sumber
hidden
pada input akan lebih pendek. hack bagus :)Saya telah menghabiskan beberapa waktu membuat peramban silang ini untuk IE8,9,10, Opera 9+, Firefox 23, Safari (PC) dan Safari (MAC)
Contoh JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/
Kode dasar - Panggil fungsi ini melalui "onkeypress" yang terlampir pada formulir Anda dan berikan "window.event" ke dalamnya.
sumber
Kemudian di formulir Anda:
Padahal, akan lebih baik jika Anda tidak menggunakan JavaScript yang mencolok.
sumber
charCode
. Saya juga memindahkan bagianreturn false
dalam blok if. Tangkapan yang bagus.Dalam kasus saya, JavaScript jQuery ini menyelesaikan masalah
sumber
<input>
bidang dalam formulir?Mencegah "ENTER" untuk mengirimkan formulir mungkin membuat beberapa pengguna Anda tidak nyaman. Jadi akan lebih baik jika Anda mengikuti prosedur di bawah ini:
Tulis acara 'onSubmit' di tag formulir Anda:
tulis fungsi Javascript sebagai berikut:
Apa pun alasannya, jika Anda ingin mencegah pengiriman formulir dengan menekan tombol Enter, Anda dapat menulis fungsi berikut dalam javascript:
Terima kasih.
sumber
Tambahkan tag ini ke formulir Anda -
onsubmit="return false;"
Maka Anda hanya dapat mengirimkan formulir Anda dengan beberapa fungsi JavaScript.sumber
Untuk mencegah pengiriman formulir saat menekan entera
textarea
atauinput
pengiriman bidang , periksa ajukan acara untuk menemukan jenis elemen yang mengirim acara.Contoh 1
HTML
jQuery
Solusi yang lebih baik adalah jika Anda tidak memiliki tombol kirim dan Anda memecat acara dengan tombol normal. Itu lebih baik karena dalam contoh pertama 2 ajukan acara dipecat, tetapi dalam contoh kedua hanya 1 ajukan acara dipecat.
Contoh 2
HTML
jQuery
sumber
Anda akan menemukan ini lebih sederhana dan bermanfaat: D
sumber
Bagaimana tentang:
sumber
Silakan periksa artikel ini. Bagaimana mencegah ENTER menekan tombol untuk mengirimkan formulir web?
sumber
Anda dapat menjebak keydown pada formulir di javascript dan mencegah bahkan menggelegak, saya pikir. ENTER pada halaman web pada dasarnya hanya mengirimkan formulir di mana kontrol yang dipilih saat ini ditempatkan.
sumber
Tautan ini memberikan solusi yang telah bekerja untuk saya di Chrome, FF, dan IE9 plus emulator untuk IE7 dan 8 yang dilengkapi dengan alat pengembang IE9 (F12).
http://webcheatsheet.com/javascript/disable_enter_key.php
sumber
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Pendekatan lain adalah dengan menambahkan tombol input kirim ke formulir hanya ketika seharusnya diajukan dan menggantinya dengan div sederhana selama mengisi formulir
sumber
Cukup tambahkan atribut ini ke tag FORMULIR Anda:
Kemudian, di tag SCRIPT Anda, tambahkan ini:
Kemudian, ketika Anda membuat tombol atau karena alasan lain (seperti dalam suatu fungsi) Anda akhirnya mengizinkan pengiriman, cukup balikkan boolean global dan lakukan panggilan .submit (), mirip dengan contoh ini:
sumber
Saya telah menemukan ini sendiri karena saya memiliki beberapa tombol kirim dengan nilai 'nama' yang berbeda, sehingga ketika dikirimkan mereka melakukan hal yang berbeda pada file php yang sama. The
enter
/return
tombol istirahat ini sebagai nilai-nilai yang tidak disampaikan. Jadi saya berpikir, apakah tombolenter
/return
mengaktifkan tombol kirim pertama dalam formulir? Dengan begitu Anda bisa memiliki tombol kirim 'vanilla' yang tersembunyi atau memiliki nilai 'nama' yang mengembalikan file php pelaksana kembali ke halaman dengan formulir di dalamnya. Atau nilai 'nama' default (tersembunyi) yang diaktifkan oleh penekanan tombol, dan tombol kirim ditimpa dengan nilai 'nama' mereka sendiri. Hanya pemikiran saja.sumber
Bagaimana tentang:
Dan cukup beri nama tombol Anda dengan benar dan itu masih akan mengirimkan, tetapi bidang teks yaitu eksplisitOriginalTarget ketika Anda menekan kembali dalam satu, tidak akan memiliki nama yang tepat.
sumber
Ini berhasil untuk saya.
onkeydown = "return! (event.keyCode == 13)"
sumber
Begini cara saya melakukannya:
sumber
dimasukkan ke dalam file eksternal javascript
atau di suatu tempat di dalam tag tubuh
sumber
Saya memiliki masalah yang sama (formulir dengan banyak bidang teks dan pengguna tidak terampil).
Saya memecahkannya dengan cara ini:
menggunakan ini dalam kode HTML:
Dengan cara ini
ENTER
kunci berfungsi seperti yang direncanakan, tetapi konfirmasi (satu detikENTER
ketukan , biasanya) diperlukan.Saya serahkan kepada pembaca pencarian skrip yang mengirim pengguna ke bidang tempat dia menekan
ENTER
jika dia memutuskan untuk tetap menggunakan formulir itu.sumber