Saya mencoba menemukan nilai tombol kirim yang memicu formulir untuk dikirim
$("form").submit(function() {
});
Saya mungkin dapat mengaktifkan peristiwa $ ("input [type = submit]"). Click () untuk setiap tombol dan menetapkan beberapa variabel, tetapi itu tampaknya kurang elegan daripada cara menarik tombol dari formulir saat kirim.
formobj.submit()
. Saya pikir acara klik adalah cara yang tepat.event.submitter
yang memberi Anda<button>
atau<input type="submit">
yang diklik.Jawaban:
Saya memanfaatkan
document.activeElement
seperti yang digambarkan dalam jawaban ini: Bagaimana cara mendapatkan elemen fokus dengan jQuery?Saya memanfaatkan fakta, bahwa tombol selalu menjadi elemen fokus setelah mengkliknya. Ini tidak akan berhasil, jika Anda melakukan yang
blur()
benar setelah klik.@Doin telah melihat kelemahan lain. Jika pengguna mengirimkan formulir melalui
enter
di bidang teks,document.activeElement
tidak disetel. Anda harus berhati-hati untuk ini sendiri, dengan menanganikeypress
peristiwa di dalaminput[type="text"]
dan serupa.Pembaruan 2017-01: Untuk perpustakaan saya Hyperform, saya memilih untuk tidak menggunakan
activeElement
tetapi untuk menangkap semua acara, yang mengarah ke pengiriman formulir. Kode untuk ini ada di Github.Jika Anda kebetulan menggunakan Hyperform, berikut cara Anda mengakses tombol yang memicu pengiriman:
sumber
activeElement
, karena "pengirim" dapat didefinisikan: A. Melalui aktivasi klik otentik (diklik langsung dengan mouse atau keyboard Spasi / Enter); B. Melalui aktivasi klik sintetis (buttonElement.click()
ataubuttonElement.dispatch(new MouseEvent(...))
, tanpa mendapatkan fokus); C. via formulir secara implisit pengiriman (interaksi keyboard dengan bidang formulir lain) D. ke tidak ada, ketikaformElement.submit()
Saya menerapkan ini dan saya kira itu akan berhasil.
dan ini adalah acara tombol kirim yang menyiapkannya
Terima kasih atas tanggapannya, tapi ini tidak terlalu aneh ...
sumber
doNotSubmit
kelas, di dalam fungsi kirim periksa apakah kelas tersebut tidak ada (jika tidak jangan kirimkan), di dalam acara klik hapus kelas formulirdoNotSubmit
dan lakukan pemicu $ (''. MyForm '). ('Kirimkan'); setelah menambahkan nilai tombol kirim sebagai bidang tersembunyiSaya membuat formulir uji dan menggunakan Firebug menemukan cara ini untuk mendapatkan nilainya;
Sayangnya, hanya Firefox yang mendukung acara ini.
sumber
Sekarang ada
submitter
properti standar dalam acara kirim.Sudah diterapkan di Firefox 75 !
Untuk browser yang tidak mendukungnya, gunakan polyfill ini :
sumber
Inilah pendekatan yang tampaknya lebih bersih untuk tujuan saya.
Pertama, untuk segala bentuk:
Saat peristiwa klik ini diaktifkan untuk sebuah formulir, itu hanya mencatat target asal (tersedia di objek peristiwa) untuk diakses nanti. Ini adalah goresan yang cukup luas, karena akan diaktifkan untuk setiap klik di mana pun pada formulir. Komentar pengoptimalan diterima, tetapi saya curiga itu tidak akan pernah menimbulkan masalah yang nyata.
Kemudian, di $ ('form'). Submit (), Anda dapat menanyakan apa yang terakhir diklik, dengan sesuatu seperti
sumber
Menurut tautan ini , objek acara berisi bidang
Event.target
, yang:Mengembalikan string yang mewakili objek yang memulai acara.
Saya baru saja membuat halaman yang menguji apa nilai itu, dan tampaknya representasi itu untuk formulir itu sendiri, bukan untuk tombol yang diklik. Dengan kata lain, Javascript tidak menyediakan fasilitas untuk menentukan tombol yang diklik.
Sejauh solusi Dave Anderson , mungkin ada baiknya untuk mengujinya di beberapa browser sebelum menggunakannya. Mungkin saja itu bisa bekerja dengan baik, tapi saya tidak bisa mengatakannya.
sumber
target
mengembalikan seluruh bentuk. Jadi sayangnya tidak membantu untuk mendeteksi tombol kirim yang tepat.Event.target
bukanlah sebuah string. Itu sebuahEventTarget
objek, yang dalam hal ini adalah formulir yang dikirimkan itu sendiri.Salah satu pendekatan bersih adalah dengan menggunakan acara klik pada setiap tombol formulir. Berikut adalah formulir html dengan tombol simpan, batalkan dan hapus:
Berikut ini adalah jquery tersebut. Saya mengirim 'tindakan' yang sesuai ke fungsi server yang sama tergantung pada tombol mana yang diklik ('simpan' atau 'hapus'). Jika 'batal', diklik, saya baru saja memuat ulang halaman.
sumber
Saya mencari dan menemukan beberapa cara untuk mendapatkan tombol kirim
name
+value
dikirim ke server menggunakan jQuery + AJAX. Saya tidak begitu menyukai mereka ...Salah satu yang terbaik adalah solusi pemburu yang disajikan di sini!
Tapi saya sendiri yang menulis satu sama lain.
Saya ingin berbagi, karena itu bagus, dan, sesuai kebutuhan, ini berfungsi juga dengan formulir yang dimuat melalui ajax (setelah document.ready):
Sederhana! Saat tombol kirim diklik, bidang tersembunyi ditambahkan ke formulir, menggunakan sama
name
danvalue
tombol yang kirim.EDIT: Versi di bawah ini lebih mudah dibaca. Juga, ini menangani penghapusan bidang tersembunyi yang ditambahkan sebelumnya (dalam kasus mengirimkan formulir yang sama dua kali, yang sangat mungkin saat menggunakan AJAX).
Kode yang ditingkatkan:
sumber
<button/>
yang berbaginame
atribut yang sama . Saya akan menggunakan kelas dan mengacu pada kelas Anda.remove()
.name
atribut. Jika formulir digunakan kembali dan berisi masukan pengiriman dengan nama berbeda, masukan lama dapat mengacaukan formulir.<button/>
elemen, sementara<input type="submit" />
digunakan dalam kode ...)Saya memang mencoba beberapa contoh yang diberikan, tetapi tidak berhasil untuk tujuan kami.
Ini biola untuk ditunjukkan: http://jsfiddle.net/7a8qhofo/1/
Saya dihadapkan pada masalah serupa, dan inilah cara kami menyelesaikan masalah dalam formulir kami.
sumber
(acara)
sumber
Anda dapat mencoba cara ini dengan "event.originalEvent.x" dan "event.originalEvent.y":
sumber
jQuery tampaknya tidak memberikan data itu pada acara kirim. Sepertinya metode yang Anda usulkan adalah yang terbaik.
sumber
Hanya solusi lain karena tidak ada yang lain yang memenuhi persyaratan saya. Keuntungannya adalah, klik dan penekanan tombol (masuk dan spasi) terdeteksi.
Ini bekerja paling baik untuk saya.
sumber
Dengan event handler dan JQuery yang lebih spesifik, objek event Anda adalah tombol yang diklik. Anda juga bisa mendapatkan formulir delegasi dari acara ini jika diperlukan.
Dokumen ini memiliki semua yang Anda butuhkan untuk memulai. Dok JQuery .
sumber
Saya menulis fungsi ini yang membantu saya
dan kemudian Gunakan
sumber
Ada properti pengirim untuk SubmitEvent formulir . Namun, untuk saat ini, ini tidak berfungsi di Safari.
Pendekatan berbeda yang berfungsi di semua browser. Namun, Anda harus mengandalkan
form
elemen alih-alihevent
objeknya. Ini pada dasarnya menambahkan properti 'pengirim' ke objek elemen formulir yang dapat direferensikan nanti saat pengiriman formulir.sumber