Saya memiliki formulir yang memiliki tombol kirim di suatu tempat.
Namun, saya ingin 'menangkap' acara pengiriman dan mencegahnya agar tidak terjadi.
Apakah ada cara saya bisa melakukan ini?
Saya tidak dapat mengubah tombol kirim, karena itu bagian dari kontrol khusus.
javascript
html
forms
Nathan Osman
sumber
sumber
Jawaban:
Berbeda dengan jawaban yang lain, pengembalian
false
hanyalah sebagian dari jawaban. Pertimbangkan skenario di mana kesalahan JS terjadi sebelum pernyataan pengembalian ...html
naskah
kembali ke
false
sini tidak akan dieksekusi dan formulir akan dikirimkan dengan cara apa pun. Anda juga harus meneleponpreventDefault
untuk mencegah tindakan formulir default untuk pengiriman formulir Ajax.Dalam hal ini, bahkan dengan bug, formulir tidak akan dikirimkan!
Atau,
try...catch
blok dapat digunakan.sumber
false
langsung kembali darionsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
.Otherwise itu memberikan kesalahan Undefined.Anda dapat menggunakan acara inline
onsubmit
seperti iniAtau
Demo
Sekarang, ini mungkin bukan ide yang baik ketika membuat proyek besar. Anda mungkin perlu menggunakan Pendengar Acara.
Silakan baca lebih lanjut tentang Acara Inline vs Pendengar Acara (addEventListener dan IE's attachEvent) di sini . Sebab aku tidak bisa menjelaskannya lebih daripada yang dilakukan Chris Baker .
sumber
<form onsubmit="return false;" >
tidak berfungsi untuk saya.Lampirkan pendengar acara ke formulir menggunakan
.addEventListener()
dan kemudian memanggil.preventDefault()
metode dievent
:Saya pikir ini solusi yang lebih baik daripada mendefinisikan
submit
event handler sesuai denganonsubmit
atribut karena memisahkan logika dan struktur halaman web. Jauh lebih mudah untuk mempertahankan proyek di mana logika dipisahkan dari HTML. Lihat: JavaScript yang tidak mengganggu .Menggunakan
.onsubmit
propertiform
objek DOM bukan ide yang baik karena mencegah Anda melampirkan beberapa panggilan balik kirim ke satu elemen. Lihat addEventListener vs onclick .sumber
$("button").click(function(e) { e.preventDefault() });
Coba yang ini...
Kode HTML
Kode jQuery
atau
sumber
stopPropagation
adalah satu-satunya hal yang berhasil dalam kasus saya. Terima kasih! :)Yang berikut berfungsi sampai sekarang (diuji dalam chrome dan firefox):
di mana validateMyForm () adalah fungsi yang mengembalikan
false
jika validasi gagal. Poin kuncinya adalah menggunakan namaevent
. Kami tidak dapat menggunakan untuk misalnyae.preventDefault()
sumber
sumber
.onsubmit
adalah ide yang buruk karena mencegah Anda melampirkan beberapasubmit
panggilan balik ke satu elemen. Saya sarankan menggunakan.addEventListener()
.Untuk mengikuti konvensi pemrograman JavaScript yang tidak mengganggu , dan tergantung pada seberapa cepat DOM akan dimuat, mungkin ide yang baik untuk menggunakan yang berikut ini:
Kemudian, sambungkan acara menggunakan onload atau DOM siap jika Anda menggunakan perpustakaan.
Juga, saya akan selalu menggunakan
action
atribut tersebut karena beberapa orang mungkin memiliki beberapa plugin seperti NoScript berjalan yang kemudian akan memecah validasi. Jika Anda menggunakan atribut tindakan, setidaknya pengguna Anda akan diarahkan oleh server berdasarkan validasi backend. Jika Anda menggunakan sesuatu sepertiwindow.location
, di sisi lain, semuanya akan menjadi buruk.sumber
Untuk mencegah pengiriman formulir, Anda hanya perlu melakukan ini.
Dengan menggunakan kode di atas ini akan mencegah pengiriman formulir Anda.
sumber
Inilah jawaban saya:
Saya menambahkan
event.preventDefault();
padaonsubmit
dan bekerja.sumber
Anda bisa menambahkan eventListner ke formulir, itu
preventDefault()
dan mengonversi data formulir ke JSON seperti di bawah ini:sumber