Saya ingin menunjukkan tombol radio, minta nilainya disampaikan, tetapi tergantung pada keadaan, tidak boleh diedit. Dinonaktifkan tidak berfungsi, karena tidak mengirimkan nilai (atau bukan?), Dan mematikan tombol radio. Hanya baca adalah yang benar-benar saya cari, tetapi untuk beberapa alasan misterius itu tidak berfungsi.
Apakah ada beberapa trik aneh yang perlu saya tarik agar bisa dibaca-hanya agar berfungsi seperti yang diharapkan? Haruskah saya melakukannya dalam JavaScript saja?
Secara kebetulan, apakah ada yang tahu mengapa read-only tidak berfungsi di tombol radio, sementara itu bekerja di tag input lain? Apakah ini salah satu dari kelalaian yang tidak dapat dipahami dalam spesifikasi HTML?
Jawaban:
Saya hanya memalsukan tombol radio dengan menonaktifkan hanya tombol radio yang tidak dicentang. Ini membuat pengguna tidak memilih nilai yang berbeda, dan nilai yang dicentang akan selalu dikirim pada saat pengiriman.
Menggunakan jQuery untuk membuat hanya baca:
Pendekatan ini juga berfungsi untuk membuat daftar pilih dibaca hanya, kecuali bahwa Anda harus menonaktifkan setiap opsi yang tidak dipilih.
sumber
readonly
properti, seperti yang diharapkan OP untuk berfungsi:$(':radio[readonly]:not(:checked)').attr('disabled', true);
Tombol radio hanya perlu dibaca-saja jika ada opsi lain. Jika Anda tidak memiliki opsi lain, tombol radio yang dicentang tidak dapat dicentang. Jika Anda memiliki opsi lain, Anda dapat mencegah pengguna mengubah nilai hanya dengan menonaktifkan opsi lain:
Fiddle: http://jsfiddle.net/qqVGu/
sumber
onclick="return false"
untuk mencegah perubahan.Ini adalah trik yang bisa Anda gunakan.
sumber
onClick="this.checked = <%=value%>"
dari beberapa variasi :)onclick="return false;"
untuk menjaga nilai tetap sama untuk grupSaya memiliki formulir yang panjang (250+ bidang) yang diposkan ke db. Ini adalah aplikasi pekerjaan online. Ketika seorang admin pergi untuk melihat aplikasi yang telah diajukan, formulir diisi dengan data dari db. Teks input dan textareas diganti dengan teks yang mereka kirimkan tetapi radio dan kotak centang berguna untuk tetap sebagai elemen form. Menonaktifkannya membuat mereka lebih sulit dibaca. Mengatur properti .checked ke false onclick tidak akan berfungsi karena mereka mungkin sudah diperiksa oleh pengguna yang mengisi aplikasi. Bagaimanapun...
berfungsi seperti pesona untuk 'menonaktifkan' radio dan kotak centang ipso facto.
sumber
Solusi terbaik adalah dengan mengatur keadaan dicentang atau tidak dicentang (baik dari klien atau server) dan untuk tidak membiarkan pengguna mengubahnya setelah bangsal (yaitu membuatnya hanya dibaca) melakukan hal berikut:
sumber
Saya telah menemukan cara javascript-berat untuk mencapai status readonly untuk kotak centang dan tombol radio. Ini diuji terhadap versi Firefox, Opera, Safari, Google Chrome saat ini, serta versi IE saat ini dan sebelumnya (turun ke IE7).
Mengapa tidak menggunakan saja properti yang dinonaktifkan yang Anda minta? Saat mencetak halaman, elemen input yang dinonaktifkan keluar dalam warna abu-abu. Pelanggan yang menerapkan ini ingin semua elemen memiliki warna yang sama.
Saya tidak yakin apakah saya boleh memposting kode sumber di sini, karena saya mengembangkan ini ketika bekerja untuk sebuah perusahaan, tetapi saya pasti dapat berbagi konsep.
Dengan acara onmousedown, Anda dapat membaca status pemilihan sebelum tindakan klik mengubahnya. Jadi, Anda menyimpan informasi ini dan kemudian memulihkan status ini dengan acara onclick.
Bagian javascript ini kemudian akan berfungsi seperti ini (sekali lagi hanya konsepnya):
Anda sekarang dapat mengaktifkan / menonaktifkan tombol radio / kotak centang dengan mengubah properti onclick dan onmousedown dari elemen input.
sumber
Untuk tombol radio yang tidak dipilih, tandai sebagai dinonaktifkan. Ini mencegah mereka merespons input pengguna dan menghapus tombol radio yang diperiksa. Sebagai contoh:
sumber
checked="yes"
? Spek apa itu? Baik menggunakanchecked="checked"
atau hanya atributchecked
tanpa nilai. Sama untukdisabled
.Cara JavaScript - ini bekerja untuk saya.
Alasan:
$('#YourTableId').find('*')
-> ini mengembalikan semua tag.$('#YourTableId').find('*').each(function () { $(this).attr("disabled", true); });
mengulangi semua objek yang ditangkap dalam hal ini dan menonaktifkan tag input.Analisis (Debugging):
form:radiobutton
secara internal dianggap sebagai tag "input".Seperti pada fungsi di atas (), jika Anda mencoba mencetak
document.write(this.tagName);
Di mana pun, dalam tag ia menemukan tombol radio, ia mengembalikan tag input.
Jadi, baris kode di atas dapat lebih dioptimalkan untuk tag tombol radio, dengan mengganti * dengan input:
$('#YourTableId').find('input').each(function () { $(this).attr("disabled", true); });
sumber
Pilihan yang cukup sederhana adalah membuat fungsi javascript yang dipanggil pada acara "onsubmit" formulir untuk mengaktifkan kembali radiobutton sehingga nilainya diposting dengan sisa formulir.
Tampaknya tidak ada kelalaian pada spesifikasi HTML, tetapi pilihan desain (yang logis, IMHO), radiobutton tidak dapat dibaca hanya sebagai tombol tidak bisa, jika Anda tidak ingin menggunakannya, maka nonaktifkan itu.
sumber
Saya menemukan bahwa penggunaan
onclick='this.checked = false;'
bekerja sampai batas tertentu. Tombol radio yang diklik tidak akan dipilih. Namun, jika ada tombol radio yang sudah dipilih (misalnya, nilai default), tombol radio itu akan menjadi tidak dipilih.Untuk skenario ini, membiarkan nilai default sendiri dan menonaktifkan tombol radio lainnya mempertahankan tombol radio yang sudah dipilih dan mencegahnya tidak dipilih.
Solusi ini bukan cara yang paling elegan untuk mencegah nilai default diubah, tetapi ini akan berfungsi apakah javascript diaktifkan atau tidak.
sumber
Cobalah atributnya
disabled
, tetapi saya pikir Anda tidak akan mendapatkan nilai dari tombol radio. Atau setel gambar seperti:Salam Hormat.
sumber
Saya menggunakan plugin JS yang memberi style pada kotak centang / elemen input radio dan menggunakan jQuery berikut untuk membuat 'status baca saja' di mana nilai yang mendasarinya masih diposkan tetapi elemen input tampaknya tidak dapat diakses oleh pengguna, yang saya percaya alasan yang dimaksud kita akan menggunakan atribut input hanya baca ...
sumber
Bagaimana dengan menangkap peristiwa "On_click ()" di JS dan memeriksanya seperti di sini ?:
http://www.dynamicdrive.com/forums/showthread.php?t=33043
sumber