Saya memiliki kotak centang yang, dengan ketentuan tertentu, perlu dinonaktifkan. Ternyata HTTP tidak memposting input yang dinonaktifkan.
Bagaimana saya bisa mengatasi itu? mengirimkan input bahkan jika itu dinonaktifkan dan membuat input tetap dinonaktifkan?
html
forms
html-input
AnApprentice
sumber
sumber
Jawaban:
PEMBARUAN :
READONLY
tidak berfungsi pada kotak centangAnda bisa menggunakan
disabled="disabled"
tetapi pada titik ini nilai kotak centang tidak akan muncul ke dalamPOST
nilai. Salah satu strateginya adalah menambahkan bidang tersembunyi yang menahan nilai kotak centang dalam formulir yang sama dan membaca kembali nilai dari bidang ituCukup ubahdisabled
kereadonly
sumber
<input name="foo" value="bar" readonly="readonly" />
readonly
tidak akan berfungsi karena Anda tidak akan dapat memposting nilai kotak centang dengan tag tersebut, gunakandisabled
bersama dengan elemen input tersembunyi untuk menyimpan nilai kotak centang, lihat caranya: stackoverflow.com/a/8274787/448816Saya sudah memecahkan masalah itu.
Karena
readonly="readonly"
tag tidak berfungsi (saya sudah mencoba berbagai browser), Anda harus menggunakannyadisabled="disabled"
. Tetapi nilai kotak centang Anda tidak akan dikirim maka ...Ini solusinya:
Untuk mendapatkan tampilan "hanya baca" dan nilai kotak centang POST dalam waktu bersamaan, tambahkan saja "input" tersembunyi dengan nama dan nilai yang sama dengan kotak centang Anda . Anda harus menyimpannya di sebelah kotak centang atau di antara
<form></form>
tag yang sama :Juga, biarkan kamu tahu
readonly="readonly", readonly="true", readonly="",
atau tidakREADONLY
akan menyelesaikan ini! Saya telah menghabiskan beberapa jam untuk mencari tahu!Referensi ini juga TIDAK relevan (mungkin belum, atau tidak lagi, saya tidak tahu): http://www.w3schools.com/tags/att_input_readonly.asp
sumber
Jika Anda senang menggunakan JQuery maka hapus atribut yang dinonaktifkan saat mengirimkan formulir:
sumber
<select>
atau<textfield>
atau elemen HTML lain yang mendukungdisabled
atribut, Anda dapat memilihnya dan mengaktifkan semuanya dengan:$( "*:disabled" ).removeAttr("disabled");
Anda bisa mengatasinya dengan cara ini ... Untuk setiap kotak centang, buat bidang tersembunyi dengan
name
atribut yang sama . Tetapi atur nilai bidang tersembunyi itu dengan beberapa nilai default yang bisa Anda uji. Sebagai contoh..Jika kotak centang "dicentang" ketika formulir dikirimkan, maka nilai parameter formulir itu akan menjadi
Jika kotak centang tidak dicentang, maka nilainya akan menjadi
Anda bisa menggunakan nilai apa pun alih-alih "salah", tetapi Anda mendapatkan idenya.
sumber
Saya mulai dari masalah: "bagaimana POST / Kirim Kotak centang Input yang dinonaktifkan?" dan dalam jawaban saya, saya melewatkan komentar: "Jika kita ingin menonaktifkan kotak centang kita pasti perlu menyimpan nilai awalan (dicentang atau tidak dicentang) dan juga kita ingin agar pengguna menyadarinya (kalau tidak kita harus menggunakan jenis tersembunyi dan bukan kotak centang) ". Dalam jawaban saya, saya mengira kami ingin selalu mencentang kotak dan kode itu bekerja dengan cara ini. Jika kita mengklik ckeckbox itu akan selamanya dicentang dan nilainya akan POSTED / Diserahkan! Dengan cara yang sama jika saya menulis onclick = "this.checked = false" tanpa dicentang = "dicentang" (catatan: default tidak dicentang) selamanya akan dicentang dan nilainya tidak akan POSTED / Dikirim !.
sumber
buat kelas css misalnya:
terapkan kelas ini sebagai ganti atribut yang dinonaktifkan
sumber
Cara paling sederhana untuk ini adalah:
Ini akan mencegah pengguna untuk tidak memilih kotak centang ini dan itu masih akan mengirimkan nilainya ketika formulir dikirimkan. Hapus dicentang jika Anda ingin pengguna tidak dapat memilih kotak centang ini.
Selain itu, Anda kemudian dapat menggunakan javascript untuk menghapus onclick setelah kondisi tertentu terpenuhi (jika itu yang Anda cari). Berikut ini biola yang menunjukkan apa yang saya maksud. Itu tidak sempurna, tetapi Anda mendapatkan intinya.
http://jsfiddle.net/vwUUc/
sumber
Ini berfungsi seperti pesona:
Satu-satunya kelemahan adalah mem-flash pendek bidang input yang dinonaktifkan saat mengirimkan. Setidaknya dalam skenario saya itu bukan masalah besar!
sumber
Jangan nonaktifkan itu; alih-alih mengaturnya menjadi hanya baca, meskipun ini tidak memiliki efek karena tidak memungkinkan pengguna untuk mengubah status. Tetapi Anda dapat menggunakan jQuery untuk memberlakukan ini (mencegah pengguna mengubah kondisi kotak centang:
Ini mengasumsikan bahwa semua kotak centang yang tidak ingin Anda modifikasi memiliki atribut "readonly". misalnya.
sumber
Sejak:
Saya akan menawarkan Anda kemungkinan lain:
Tetapkan kotak centang Anda sebagai dinonaktifkan seperti biasa. Dan sebelum formulir dikirimkan oleh pengguna, aktifkan kotak centang ini oleh JavaScript.
Karena kotak centang diaktifkan sebelum formulir dikirimkan, nilainya diposting dengan cara yang sama. Satu-satunya hal yang tidak terlalu menyenangkan tentang solusi ini adalah bahwa kotak centang ini menjadi diaktifkan untuk sementara waktu dan yang dapat dilihat oleh pengguna. Tapi itu hanya detail yang bisa saya jalani.
sumber
Sayangnya tidak ada solusi 'sederhana'. Atribut readonly tidak dapat diterapkan ke kotak centang. Saya membaca spesifikasi W3 tentang kotak centang dan menemukan pelakunya:
Jika kontrol tidak memiliki nilai saat ini ketika formulir dikirimkan, agen pengguna tidak diharuskan untuk memperlakukannya sebagai kontrol yang berhasil. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Ini menyebabkan keadaan tidak dicentang dan keadaan dinonaktifkan menghasilkan nilai parsing yang sama.
Satu-satunya cara penuh-bukti untuk melakukan ini adalah menambahkan input tersembunyi dengan nama yang sama dengan javascript saat mengirimkan formulir .
Anda dapat menggunakan potongan kecil yang saya buat untuk ini:
Ini mencari formulir pertama dalam dokumen, mengumpulkan semua input dan mencari input yang dinonaktifkan. Ketika input yang dinonaktifkan ditemukan, input tersembunyi dibuat di parentNode dengan nama yang sama dan nilai 'on' (jika statusnya 'dicentang') dan '' (jika statusnya adalah '' - tidak dicentang).
Fungsi ini harus dipicu oleh acara 'kirim' di elemen FORM sebagai:
sumber
Tambahkan
onsubmit="this['*nameofyourcheckbox*'].disabled=false"
ke formulir.sumber
Tidak ada pilihan lain selain
hidden
bidang, jadi coba gunakanhidden
bidang seperti yang ditunjukkan pada kode di bawah ini:sumber
Function some_name adalah contoh klausa sebelumnya untuk mengelola kotak centang kedua yang dicentang (memposting nilainya) atau tidak dicentang (tidak memposting nilainya) sesuai dengan klausa dan pengguna tidak dapat mengubah statusnya; tidak perlu mengelola semua penonaktifan kotak centang kedua
sumber
Anda dapat tetap menonaktifkannya seperti yang diinginkan, dan kemudian menghapus atribut yang dinonaktifkan sebelum formulir dikirimkan.
sumber
Menambah
onclick="this.checked=true"
Selesaikan masalah saya:Contoh:
sumber
Berikut ini pekerjaan lain yang bisa dikontrol dari backend.
ASPX
Di ASPX.CS
Kelas hanya ditambahkan untuk keperluan gaya.
sumber
Saya baru saja menggabungkan saran HTML, JS dan CSS dalam jawaban di sini
HTML:
jQuery:
CSS:
Karena elemen ini tidak 'dinonaktifkan', ia masih melewati POST.
sumber