Saya pikir mereka bisa saja, tetapi karena saya tidak meletakkan uang saya di mana mulut saya (untuk berbicara) mengatur atribut readonly tampaknya tidak melakukan apa-apa.
Saya lebih suka tidak menggunakan Dinonaktifkan, karena saya ingin kotak centang yang dicentang dikirimkan dengan sisa formulir, saya hanya tidak ingin klien dapat mengubahnya dalam keadaan tertentu.
readonly
)readonly
! Mengapa atribut ini ada?readonly
hanya atribut sisi klien untuk membantu peramban merender situs dengan benar dan kemudian membuat permintaan yang benar darinya. Server tidak bisa dan tidak boleh tahu tentangreadonly
atribut halaman yang diberikan. Itu harus mengasumsikan permintaan datang dari mana saja (dan mungkin dengan niat jahat); jangan pernah mengandalkan input yang disediakan pengguna. Namun, mengapa mengirim nilai kotak centang yang tidak dapat Anda edit dalam permintaan (jika Anda menetapkan nilai sebelum rendering, Anda sudah tahu nilai ketika permintaan dikirimkan, jadi tidak perlu mengirimkannya dalam permintaan)readonly
atribut ada di sana karena beberapa alasan. Ini tentu saja tidak ada hubungannya dengan implementasi sisi server. Tapi itu ada untuk memberi tahu pengguna "Hei! Nilai ini diasumsikan di sini, dan / tetapi Anda tidak dapat mengubah ini."Jawaban:
Anda bisa menggunakan ini:
Ini berfungsi karena mengembalikan false dari peristiwa klik menghentikan rantai eksekusi berlanjut.
sumber
checked="checked"
, jangan main-main dengan javascript. Javascript hanya ada di sana untuk memaksa klik mouse diabaikan pada objek input, bukan untuk mengatur keadaan kotak centang.READONLY
tidak bekerja pada checkbox karena mencegah Anda dari mengedit lapangan nilai , tapi dengan checkbox Anda benar-benar mengedit bidang ini negara (on off ||)Dari faqs.org :
Jika Anda tidak ingin menggunakan
disabled
tetapi masih ingin mengirimkan nilai, bagaimana dengan mengirimkan nilai sebagai bidang tersembunyi dan hanya mencetak kontennya kepada pengguna ketika mereka tidak memenuhi kriteria edit? misalnyasumber
Ini adalah kotak centang yang tidak dapat Anda ubah:
Cukup tambahkan
disabled="disabled"
sebagai atribut.Edit untuk menanggapi komentar:
Jika Anda ingin data diposkan kembali, solusi sederhana adalah dengan menerapkan nama yang sama ke input tersembunyi:
Dengan cara ini, ketika kotak centang diatur ke 'dinonaktifkan', itu hanya melayani tujuan representasi visual dari data, bukannya benar-benar 'ditautkan' ke data. Di pos kembali, nilai input tersembunyi dikirim ketika kotak centang dinonaktifkan.
sumber
Tetapi Anda benar-benar HARUS memvalidasi data di server untuk memastikan itu tidak berubah.
sumber
"solusi sederhana" lainnya:
sumber
name
danvalue
atribut dari kotak dummy Anda, juga="checked"
dan="diabled"
nilai attrib bisa diturunkan. w3.org/TR/html-markup/input.checkbox.htmlIni menyajikan sedikit masalah kegunaan.
Jika Anda ingin menampilkan kotak centang, tetapi tidak membiarkannya berinteraksi, mengapa bahkan kotak centang itu?
Namun, pendekatan saya adalah menggunakan dinonaktifkan (Pengguna mengharapkan kotak centang dinonaktifkan tidak dapat diedit, alih-alih menggunakan JS untuk membuat yang diaktifkan tidak berfungsi), dan menambahkan formulir kirim penangan tangan menggunakan javascript yang memungkinkan kotak centang tepat sebelum formulir dikirimkan. Dengan cara ini Anda mendapatkan nilai-nilai Anda diposting.
yaitu sesuatu seperti ini:
sumber
dengan jquery:
mungkin masih merupakan ide yang baik untuk memberikan beberapa petunjuk visual (css, teks, ...), bahwa kontrol tidak akan menerima input.
sumber
$(':checkbox[readonly]')
memilih semua kotak centang kandidat karena nilaireadonly
atribut bersifat opsional.Saya menggunakan ini untuk mencapai hasil:
sumber
Saya kebetulan memperhatikan solusi yang diberikan di bawah ini. Di menemukannya penelitian saya untuk masalah yang sama. Saya tidak yang mempostingnya tetapi itu bukan buatan saya. Ini menggunakan jQuery:
Ini akan membuat kotak centang hanya baca yang akan membantu untuk menampilkan data yang hanya dibaca kepada klien.
sumber
sumber
onclick="javascript: return true;"
membuatnya berfungsi seperti kotak centang normal. Petunjuk? Terima kasih!checked
atribut dan tetapfalse
di tempatnya.Jawaban yang terlambat, tetapi sebagian besar jawaban sepertinya terlalu memperumitnya.
Seperti yang saya pahami, OP pada dasarnya menginginkan:
Perlu dicatat bahwa:
disabled
atribut, karena mereka 'ingin kotak centang dicentangkan dengan sisa formulir'.yes
ataufalse
, tetapi dapat berupa teks apa pun.Oleh karena itu, karena
readonly
atribut tidak berfungsi, solusi terbaik, tanpa memerlukan javascript, adalah:Jadi untuk kotak centang yang dicentang:
Untuk kotak centang yang tidak dicentang:
Masalah utama dengan input yang dinonaktifkan, terutama kotak centang, adalah kontrasnya yang buruk yang mungkin menjadi masalah bagi sebagian orang dengan cacat visual tertentu. Mungkin lebih baik untuk menunjukkan nilai dengan kata-kata sederhana, seperti
Status: none
atauStatus: implemented
, tetapi termasuk input tersembunyi di atas ketika yang terakhir digunakan, seperti:sumber
Sebagian besar jawaban saat ini memiliki satu atau lebih dari masalah ini:
Berikut ini sederhana dan tidak memiliki masalah tersebut.
Jika kotak centang hanya dibaca, itu tidak akan berubah. Jika tidak, itu akan terjadi. Itu memang menggunakan jquery, tapi Anda mungkin sudah menggunakannya ...
Berhasil.
sumber
sumber
Jika Anda ingin mereka dikirim ke server dengan formulir tetapi tidak menarik bagi pengguna, Anda dapat menggunakan
pointer-events: none
css ( berfungsi di semua browser modern kecuali IE10- dan Opera 12- ) dan mengatur indeks-tab-1
untuk mencegah perubahan melalui keyboard. Perhatikan juga bahwa Anda tidak dapat menggunakanlabel
tag karena mengkliknya akan mengubah keadaan.sumber
for
atribut. Dalam hal ini Anda dapat menggunakaninput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
dan menambahkantabindex
? Bagaimana Anda mengatur fokus pada elemen yang tidak fokus untuk menekan spasi di atasnya?<input type="checkbox" onclick="return false" />
akan bekerja untuk Anda, saya menggunakan inisumber
Beberapa jawaban di sini sepertinya agak bundaran, tapi ini hack kecil.
lalu di jquery Anda dapat memilih satu dari dua opsi:
demo: http://jsfiddle.net/5WFYt/
sumber
Membangun jawaban di atas, jika menggunakan jQuery, ini mungkin solusi yang baik untuk semua input:
Saya menggunakan ini dengan Asp.Net MVC untuk mengatur beberapa elemen formulir hanya baca. Di atas berfungsi untuk teks dan centang kotak dengan mengatur wadah induk apa pun sebagai .baca hanya seperti skenario berikut:
sumber
sumber
Saya tahu bahwa "dinonaktifkan" bukan jawaban yang dapat diterima, karena op ingin itu dikirim. Namun, Anda selalu harus memvalidasi nilai di sisi server BAHKAN jika Anda memiliki opsi readonly yang ditetapkan. Ini karena Anda tidak dapat menghentikan pengguna jahat dari memposting nilai menggunakan atribut readonly.
Saya sarankan menyimpan nilai asli (sisi server), dan mengaturnya untuk dinonaktifkan. Kemudian, ketika mereka mengirimkan formulir, abaikan semua nilai yang diposting dan ambil nilai asli yang Anda simpan.
Ini akan terlihat dan berperilaku seperti itu nilai hanya baca. Dan itu menangani (mengabaikan) posting dari pengguna jahat. Anda membunuh 2 burung dengan satu batu.
sumber
Saya akan mengomentari jawaban ConroyP, tetapi itu membutuhkan 50 reputasi yang tidak saya miliki. Saya punya cukup reputasi untuk mengirim jawaban lain. Maaf.
Masalah dengan jawaban ConroyP adalah bahwa kotak centang diberikan tidak dapat diubah dengan bahkan tidak memasukkannya pada halaman. Meskipun Electrons_Ahoy tidak menetapkan terlalu banyak, jawaban terbaik adalah jawaban di mana kotak centang yang tidak dapat diubah akan terlihat serupa, jika tidak sama dengan, kotak centang yang dapat diubah, seperti halnya ketika atribut "dinonaktifkan" diterapkan. Solusi yang membahas dua alasan yang diberikan Electrons_Ahoy karena tidak ingin menggunakan atribut "cacat" tidak serta merta tidak valid karena menggunakan atribut "dinonaktifkan".
Asumsikan dua variabel boolean, $ diperiksa dan $ dinonaktifkan:
Kotak centang ditampilkan sebagai dicentang jika $ dicentang benar. Kotak centang ditampilkan sebagai tidak dicentang jika $ diperiksa salah. Pengguna dapat mengubah status kotak centang jika dan hanya jika $ disable salah. Parameter "my_name" tidak diposting ketika kotak centang tidak dicentang, oleh pengguna atau tidak. Parameter "my_name = 1" diposting ketika kotak centang dicentang, oleh pengguna atau tidak. Saya percaya inilah yang dicari oleh Electrons_Ahoy.
sumber
Tidak, kotak centang input tidak dapat dibaca hanya.
Tapi Anda bisa membuatnya hanya dengan javascript!
Tambahkan kode ini di mana saja kapan saja untuk menjadikan kotak centang hanya berfungsi sebagaimana mestinya, dengan mencegah pengguna memodifikasinya dengan cara apa pun.
Anda dapat menambahkan skrip ini kapan saja setelah jQuery dimuat.
Ini akan bekerja untuk elemen yang ditambahkan secara dinamis.
Ia bekerja dengan mengambil event klik (yang terjadi sebelum acara perubahan) pada elemen apa pun pada halaman, itu kemudian memeriksa apakah elemen ini adalah kotak centang hanya-baca, dan jika ya, maka ia memblokir perubahan.
Ada begitu banyak jika untuk membuatnya tidak mempengaruhi kinerja halaman.
sumber
Cukup gunakan tag sederhana yang dinonaktifkan seperti ini di bawah ini.
sumber
ide alternatifnya adalah menggunakan overlay dan menutupi input yang hanya bisa dibaca
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
sumber
Jika Anda ingin SEMUA kotak centang Anda menjadi "terkunci" sehingga pengguna tidak dapat mengubah status "dicentang" jika ada "readonly" attibute, maka Anda dapat menggunakan jQuery:
Hal yang paling keren dari kode ini adalah memungkinkan Anda untuk mengubah atribut "readonly" di seluruh kode Anda tanpa harus mem-rebind setiap kotak centang.
Ini berfungsi untuk tombol radio juga.
sumber
Alasan utama orang ingin kotak centang baca-saja dan (juga) grup radio baca-saja adalah agar informasi yang tidak dapat diubah dapat disajikan kembali kepada pengguna dalam bentuk yang dimasukkan.
OK dinonaktifkan akan melakukan ini - sayangnya kontrol yang dinonaktifkan tidak dapat dinavigasi keyboard dan karenanya melanggar semua undang-undang aksesibilitas. Ini adalah hangup TERBESAR dalam HTML yang saya tahu.
sumber
Berkontribusi sangat terlambat ... tapi bagaimanapun. Pada pemuatan halaman, gunakan jquery untuk menonaktifkan semua kotak centang kecuali yang dipilih saat ini. Kemudian atur yang saat ini dipilih sebagai hanya baca sehingga memiliki tampilan yang mirip dengan yang dinonaktifkan. Pengguna tidak dapat mengubah nilai, dan nilai yang dipilih masih mengirimkan.
sumber
Sangat terlambat ke pesta tetapi saya menemukan jawaban untuk MVC (5) Saya menonaktifkan kotak centang dan menambahkan HiddenFor SEBELUM kotak centang, jadi ketika memposting jika menemukan bidang Tersembunyi pertama dan menggunakan nilai itu. Ini berhasil.
sumber
Saya akan menggunakan atribut readonly
Kemudian gunakan CSS untuk menonaktifkan interaksi:
Perhatikan bahwa menggunakan pseudo-class: read-only tidak berfungsi di sini.
sumber
SIAP itu sendiri tidak akan berhasil. Anda mungkin dapat melakukan sesuatu yang funky dengan CSS tetapi kami biasanya membuatnya dinonaktifkan.
PERINGATAN: Jika mereka diposting kembali maka klien dapat mengubahnya, titik. Anda tidak dapat mengandalkan readonly untuk mencegah pengguna mengubah sesuatu. Selalu bisa menggunakan fiddler atau hanya memotong html w / firebug atau semacamnya.
sumber
Solusi saya sebenarnya kebalikan dari solusi FlySwat, tetapi saya tidak yakin apakah itu akan bekerja untuk situasi Anda. Saya memiliki sekelompok kotak centang, dan masing-masing memiliki penangan onClick yang mengirimkan formulir (mereka digunakan untuk mengubah pengaturan filter untuk tabel). Saya tidak ingin membolehkan banyak klik, karena klik selanjutnya setelah yang pertama diabaikan. Jadi saya menonaktifkan semua kotak centang setelah klik pertama, dan setelah mengirimkan formulir:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
Kotak centang berada dalam elemen rentang dengan ID "filter" - bagian kedua dari kode adalah pernyataan jQuery yang diulang melalui kotak centang dan menonaktifkan masing-masing. Dengan cara ini, nilai-nilai kotak centang masih dikirimkan melalui formulir (karena formulir dikirimkan sebelum menonaktifkannya), dan itu mencegah pengguna dari mengubahnya sampai halaman memuat ulang.
sumber