Saya sedang menulis beberapa javascript (a greasemonkey / userscript) yang akan memasukkan beberapa bidang masukan ke dalam formulir di situs web.
Masalahnya, saya tidak ingin bidang masukan itu memengaruhi formulir dengan cara apa pun, saya tidak ingin mereka dikirim saat formulir dikirim, saya hanya ingin javascript saya memiliki akses ke nilainya.
Adakah cara agar saya dapat menambahkan beberapa bidang masukan di tengah formulir dan tidak mengirimkannya saat formulir dikirimkan?
Jelas hal yang ideal adalah agar bidang masukan tidak berada dalam elemen formulir, tetapi saya ingin tata letak halaman yang saya hasilkan memiliki bidang masukan yang disisipkan muncul di antara elemen formulir asli.
javascript
html
forms
userscripts
Biji pohon ek
sumber
sumber
Jawaban:
Anda dapat memasukkan kolom masukan tanpa atribut "nama":
Atau Anda bisa langsung menghapusnya setelah formulir dikirimkan (dalam
jQuery
):sumber
Hal termudah untuk dilakukan adalah memasukkan elemen dengan
disabled
atribut.Dengan cara ini Anda masih dapat mengaksesnya sebagai anak-anak dalam bentuk.
Bidang yang dinonaktifkan memiliki sisi negatif bahwa pengguna tidak dapat berinteraksi dengan mereka sama sekali- jadi jika Anda memiliki
disabled
bidang teks, pengguna tidak dapat memilih teks tersebut. Jika Anda memilikidisabled
kotak centang, pengguna tidak dapat mengubah statusnya.Anda juga dapat menulis beberapa javascript untuk diaktifkan pada pengiriman formulir untuk menghapus bidang yang tidak ingin Anda kirimkan.
sumber
name
properti yang mungkin ingin Anda simpan jika ingin digunakan nanti.name
atributnya.Coba sederhana untuk menghapus atribut nama dari elemen masukan.
Jadi harus terlihat seperti itu
sumber
Saya hanya ingin menambahkan opsi tambahan: Dalam masukan Anda tambahkan tag formulir dan tentukan nama formulir yang tidak ada di halaman Anda:
sumber
fakeForm
tempat lain (tidak perlu mengirimkan) ini menghasilkan HTML yang tidak valid.Anda dapat menulis pengendali kejadian
onsubmit
yang menghapusname
atribut dari semua bidang masukan yang Anda tidak ingin disertakan dalam pengiriman formulir.Berikut contoh cepat yang belum teruji:
sumber
Saya tahu posting ini kuno, tapi saya akan membalasnya. Cara termudah / terbaik yang saya temukan hanyalah dengan mengosongkan nama.
Letakkan ini sebelum pengiriman Anda:
Secara keseluruhan, fungsi pengiriman Anda mungkin terlihat seperti ini:
Ini akan tetap mengirimkan formulir dengan semua bidang Anda yang lain, tetapi tidak akan mengirimkan formulir tanpa nama.
sumber
Tambahkan disabled = "disabled" pada masukan dan saat jquery menghapus atribut yang dinonaktifkan saat Anda ingin mengirimkannya menggunakan .removeAttr ('disabled')
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
jquery:
$("input[name='test']").removeAttr('disabled');
sumber
Semua jawaban di atas sudah menjelaskan segalanya tentang (tidak) penamaan kontrol formulir atau menghapusnya secara terprogram sebelum benar-benar mengirimkan formulir Anda.
Meskipun, dalam penelitian saya, saya menemukan satu solusi lain yang belum pernah saya lihat disebutkan dalam posting ini:
Jika Anda merangkum kontrol formulir yang Anda inginkan untuk diproses / tidak dikirim, di dalam
<form>
tag lain tanpamethod
atribut ataupath
(dan jelas tidak ada kontrol jenis kirim seperti tombol atau mengirimkan masukan bersarang di dalamnya), maka mengirimkan formulir induk tidak akan menyertakan kontrol formulir yang dienkapsulasi tersebut.Nilai kontrol [name = "notSent"] tidak akan diproses atau dikirim ke titik akhir POST server, tetapi nilai dari [name = "sent"] akan.
Solusi ini mungkin anekdotik tetapi saya masih membiarkannya untuk anak cucu ...
sumber
Tangani pengiriman formulir dalam fungsi melalui onSubmit () dan lakukan sesuatu seperti di bawah ini untuk menghapus elemen formulir: Gunakan
getElementById()
DOM, lalu gunakan[object].parentNode.removeChild([object])
misalkan bidang Anda yang dipermasalahkan memiliki atribut id kode "my_removable_field":
Ini akan memberi Anda apa yang Anda cari.
sumber
Apakah Anda bahkan membutuhkannya untuk menjadi elemen masukan sejak awal? Anda dapat menggunakan Javascript untuk secara dinamis membuat div atau paragraf atau daftar item atau apa pun yang berisi informasi yang ingin Anda sajikan.
Tetapi jika elemen interaktif itu penting dan merepotkan untuk menempatkan elemen-elemen tersebut di luar
<form>
blok, maka elemen-elemen tersebut harus dihapus dari formulir ketika halaman dikirimkan.sumber
sumber
Anda perlu menambahkan onsubmit di formulir Anda:
Dan skripnya akan seperti ini:
Ini bekerja untuk saya setiap saat :)
sumber