Pertanyaan yang lebih spesifik (dan sangat berguna!), "Bagaimana saya memeriksa item dalam set kotak centang DENGAN NILAI?", Saya pikir kita juga bisa membahas di sini, dan saya mengirim jawaban di bawah.
Perhatikan bahwa ini adalah pendekatan yang digunakan oleh unit test jQuery sebelum versi 1.6 dan lebih disukai untuk digunakan $('.myCheckbox').removeAttr('checked');karena yang terakhir akan, jika kotak awalnya dicentang, mengubah perilaku panggilan ke .reset()pada bentuk apa pun yang berisi itu - halus tapi mungkin perubahan perilaku yang tidak disukai.
Untuk lebih banyak konteks, beberapa diskusi tidak lengkap tentang perubahan penanganan checkedatribut / properti dalam transisi dari 1.5.x ke 1.6 dapat ditemukan di catatan rilis versi 1.6 dan bagian Atribut vs Properti dari .prop()dokumentasi .
@Xian menghapus atribut yang dicentang membuatnya tidak mungkin untuk mengatur ulang formulir
mcgrailm
6
Sebagai catatan tambahan, jQuery 1.6.1 harus memperbaiki masalah yang saya sebutkan, sehingga kita semua bisa kembali menggunakan $ (...). Prop (...)
cwharris
19
"Jika Anda bekerja dengan hanya satu elemen, itu akan selalu tercepat untuk digunakan DOMElement.checked = true". Tapi itu bisa diabaikan, karena itu hanya satu elemen ...
Tyler Crompton
46
Seperti yang dikatakan Tyler, ini merupakan peningkatan kinerja yang dapat diabaikan. Bagi saya, pengkodean menggunakan API umum membuatnya lebih mudah dibaca daripada mencampur API asli dan API jQuery. Saya akan tetap dengan jQuery.
Charlie Kilian
18
@TylerCrompton - Tentu saja, ini tidak sepenuhnya tentang kinerja, tetapi melakukan $(element).prop('checked')adalah pemborosan mengetik. element.checkedada dan harus digunakan dalam kasus-kasus di mana Anda sudah memilikielement
Saya mencoba kode persis ini dan itu tidak berfungsi untuk saya dalam kasus pilih semua / pilih tidak ada kotak centang yang perlu memeriksa dan menghapus centang semua serta memeriksa keadaan mereka. Sebagai gantinya, saya mencoba jawaban @Christopher Harris dan itu berhasil.
JD Smith
Mengapa menggunakan "form #mycheckbox" daripada hanya "#mycheckbox"? ID sudah unik di seluruh dokumen, lebih cepat dan lebih mudah untuk mengambilnya secara langsung.
YuriAlbuquerque
@ YuriAlbuquerque itu adalah contoh. Anda dapat menggunakan pemilih apa pun yang Anda inginkan.
bchhun
5
$ (selector) .checked tidak berfungsi. Tidak ada metode 'dicentang' di jQuery.
Brendan Byrd
318
Ini adalah cara yang benar untuk memeriksa dan menghapus centang pada kotak centang dengan jQuery, karena ini adalah standar lintas-platform, dan akan memungkinkan repost formulir.
Dengan melakukan ini, Anda menggunakan standar JavaScript untuk memeriksa dan menghapus centang pada kotak centang, sehingga peramban yang mengimplementasikan properti "kotak centang" elemen kotak centang dengan benar akan menjalankan kode ini dengan sempurna. Ini harus semua browser utama, tetapi saya tidak dapat menguji sebelum Internet Explorer 9.
Masalahnya (jQuery 1.6):
Setelah pengguna mengklik kotak centang, kotak centang itu berhenti merespons perubahan atribut yang "dicentang".
Berikut adalah contoh atribut kotak centang gagal melakukan pekerjaan setelah seseorang mengklik kotak centang (ini terjadi di Chrome).
Dengan menggunakan properti "dicentang" JavaScript pada elemen DOM , kami dapat menyelesaikan masalah secara langsung, alih-alih mencoba memanipulasi DOM agar melakukan apa yang kami inginkan .
Plugin ini akan mengubah properti yang dicentang dari setiap elemen yang dipilih oleh jQuery, dan berhasil memeriksa dan menghapus centang pada kotak dalam semua keadaan. Jadi, sementara ini mungkin tampak seperti solusi over-bearing, itu akan membuat pengalaman pengguna situs Anda lebih baik, dan membantu mencegah frustrasi pengguna.
(function( $ ){
$.fn.checked =function(value){if(value ===true|| value ===false){// Set the value of the checkbox
$(this).each(function(){this.checked = value;});}elseif(value ===undefined|| value ==='toggle'){// Toggle the checkbox
$(this).each(function(){this.checked =!this.checked;});}returnthis;};})( jQuery );
Atau, jika Anda tidak ingin menggunakan plugin, Anda dapat menggunakan potongan kode berikut:
Dalam contoh JSFiddle pertama Anda, Anda harus menggunakan removeAttr('checked')daripadaattr('checked', false)
Daniel X Moore
4
@DanielXMoore, Anda mengabaikan masalah ini. Contohnya adalah untuk menunjukkan bahwa setelah kotak centang diklik oleh pengguna, browser tidak lagi merespons checkedperubahan atribut, terlepas dari metode yang digunakan untuk mengubahnya.
cwharris
3
@ChristopherHarris Ok, Anda benar, saya melewatkan itu. Pada jQuery 1.6 sebaiknya Anda tidak menggunakan metode .prop? $('.myCheckBox').prop('checked', true)Dengan begitu, itu akan secara otomatis berlaku untuk seluruh rangkaian elemen yang cocok (hanya saat pengaturan sekalipun, mendapatkan masih yang pertama)
Daniel X Moore
Iya. propjelas merupakan cara yang tepat untuk mengatur atribut pada suatu elemen.
cwharris
@ChristopherHarris, saya telah menambahkan apa yang saya butuhkan ke plugin untuk memungkinkan fleksibilitas parameter. Ini menjadikan pemrosesan inline lebih mudah tanpa konversi tipe. Terutama dari database yang berbeda dengan 'ide' tentang apa yang "benar". Fiddle: jsfiddle.net/Cyberjetx/vcp96
Atau Anda mungkin ingin memberi mereka lebih banyak nama unik seperti mycheck () dan myuncheck () jika Anda menggunakan perpustakaan lain yang menggunakan nama-nama itu.
Yang terakhir akan mem-klik event klik untuk kotak centang, yang lain tidak. Jadi, jika Anda memiliki kode khusus di acara onclick untuk kotak centang yang ingin Anda jalankan, gunakan yang terakhir.
Ini tidak akurat. mengatur atribut 'dicentang' ke '' tidak akan menghapus centang pada kotak centang di setidaknya chrome.
cwharris
@ xixonia Saya melakukan tes sebelum saya memposting biola Anda tidak bekerja karena Anda tidak mengubah menu di sebelah kiri untuk memasukkan jquery
mcgrailm
1
mcgralim - dalam 1,6 bahkan lebih mudah .... $(".mycheckbox").prop("checked", true/false)
gnarf
2
@MarkAmery Anda menyebutkan bahwa kiriman saya tidak menambahkan apa pun pada saat kiriman, tetapi itu akurat. Jika Anda melihat riwayat jawaban yang diterima, Anda akan menemukan mereka menyarankan untuk menghapus elemen. Yang membuatnya mustahil untuk mengatur ulang formulir, itulah sebabnya saya memposting untuk memulai.
mcgrailm
1
@ mikcrailm Saya telah pergi ke depan dan mengubah jawaban yang diterima berdasarkan komentar Anda. Jika Anda ingin melihatnya dan memeriksa apakah itu terlihat bagus dalam kondisi saat ini, saya menghargai itu. Sekali lagi saya minta maaf karena memberikan kritik tajam yang, setidaknya sebagian, sangat keliru.
Mark Amery
51
Ini memilih elemen yang memiliki atribut yang ditentukan dengan nilai yang mengandung substring "ckbItem" yang diberikan:
$('input[name *= ckbItem]').prop('checked',true);
Ini akan memilih semua elemen yang mengandung ckbItem dalam atribut namanya.
Bagaimana cara saya memeriksa set-kotak centang BY VALUE?
Ingat bahwa dalam set kotak centang tipikal, semua tag input memiliki nama yang sama, mereka berbeda berdasarkan atributvalue : tidak ada ID untuk setiap input set.
Jawaban Xian dapat diperpanjang dengan pemilih yang lebih spesifik , menggunakan baris kode berikut:
Ini tidak menjawab pertanyaan (pertanyaannya adalah tentang mengatur apakah kotak centang dicentang, tidak menentukan apakah kotak centang dicentang). Ini juga merupakan cara yang sangat jelek untuk menentukan apakah kotak centang dicentang (untuk satu hal, Anda mengeksploitasi fakta tidak terbukti sendiri yang .val()akan selalu kembali undefinedketika dipanggil pada 0 elemen untuk mendeteksi bahwa objek jQuery kosong, ketika Anda bisa cukup periksa .lengthsaja) - lihat stackoverflow.com/questions/901712/… untuk pendekatan yang lebih mudah dibaca.
Mark Amery
42
Untuk memeriksa kotak centang menggunakan jQuery 1.6 atau lebih tinggi lakukan ini:
checkbox.prop('checked',true);
Untuk menghapus centang, gunakan:
checkbox.prop('checked',false);
Inilah yang ingin saya gunakan untuk mengaktifkan kotak centang menggunakan jQuery:
Jawaban ini kedaluwarsa karena ia menggunakan .attralih-alih .prop.
Blazemonger
25
Jika Anda menggunakan PhoneGap melakukan pengembangan aplikasi, dan Anda memiliki nilai pada tombol yang ingin Anda tampilkan secara instan, jangan lupa lakukan ini
$("#check").on("click",function(){var chk = document.getElementById('check').checked;var arr = document.getElementsByTagName("input");if(chk){for(var i in arr){if(arr[i].name =='check') arr[i].checked =true;}}else{for(var i in arr){if(arr[i].name =='check') arr[i].checked =false;}}});
- 1; mencampurkan pemilih jQuery seperti $("#check")dengan panggilan API DOM mentah document.getElementsByTagName("input")sepertinya tidak cocok bagi saya, terutama mengingat bahwa forloop di sini dapat dihindari dengan menggunakan .prop(). Bagaimanapun ini adalah jawaban terlambat lain yang tidak menambahkan sesuatu yang baru.
Mark Amery
20
Solusi lain yang mungkin:
var c = $("#checkboxid");if(c.is(":checked")){
$('#checkboxid').prop('checked',false);}else{
$('#checkboxid').prop('checked',true);}
Di Internet Explorer sebelum versi 9, menggunakan .prop () untuk mengatur properti elemen DOM menjadi apa pun selain nilai primitif sederhana (angka, string, atau boolean) dapat menyebabkan kebocoran memori jika properti tidak dihapus (menggunakan .removeProp ( )) sebelum elemen DOM dihapus dari dokumen. Untuk menetapkan nilai pada objek DOM dengan aman tanpa kebocoran memori, gunakan .data ().
@MarkAmery Jawaban yang diterima tidak mencakup bagaimana melakukannya tanpa jQuery. Jawaban saya menambah manfaat tambahan untuk jawaban yang diterima.
tidak harus itu truedan falsedan tidak 'true'dan 'false'?
tpower
9
Itu "tidak bekerja" karena 'false'dikonversi ke nilai boolean yang mengakibatkan true- string kosong dievaluasi falsesehingga "bekerja". Lihat biola ini misalnya apa yang saya maksud.
Shadow Wizard adalah Ear For You
@ chris97 selama saya memutar kembali hasil edit Anda; ketika seseorang berkata "Jangan gunakan kode di bawah ini karena tidak berfungsi", memperbaiki kode itu sambil meninggalkan komentar yang mengatakan bahwa itu tidak bekerja berbahaya - terutama ketika itu memecah penjelasan di komentar mengapa kode tidak sedang bekerja Yang mengatakan, jawaban ini masih agak bingung dan layak untuk downvote karena alasan yang diberikan oleh tpower dan ShadowWizard.
Mark Amery
1
gunakan nilai true dan false untuk boolean, jangan gunakan 'benar' atau 'salah' (string).
Jone Polvora
13
Ketika Anda mencentang kotak centang seperti;
$('.className').attr('checked','checked')
itu mungkin tidak cukup. Anda juga harus memanggil fungsi di bawah ini;
$('.className').prop('checked','true')
Terutama ketika Anda menghapus atribut centang kotak centang.
// when the button (select_unit_button) is clicked it returns all the checed checkboxes values
$("#select_unit_button").on("click",function(e){var arr =[];
$(':checkbox:checked').each(function(i){
arr[i]= $(this).val();// u can get id or anything else});//console.log(arr); // u can test it using this in google chrome});
$("#mycheckbox").click();
Jawaban:
JQuery modern
Gunakan
.prop()
:API DOM
Jika Anda bekerja hanya dengan satu elemen, Anda selalu dapat mengakses dasarnya
HTMLInputElement
dan memodifikasi.checked
propertinya:Manfaat menggunakan
.prop()
dan.attr()
metode daripada ini adalah bahwa mereka akan beroperasi pada semua elemen yang cocok.jQuery 1.5.x dan di bawah
The
.prop()
Metode ini tidak tersedia, sehingga Anda perlu menggunakan.attr()
.Perhatikan bahwa ini adalah pendekatan yang digunakan oleh unit test jQuery sebelum versi 1.6 dan lebih disukai untuk digunakan
$('.myCheckbox').removeAttr('checked');
karena yang terakhir akan, jika kotak awalnya dicentang, mengubah perilaku panggilan ke.reset()
pada bentuk apa pun yang berisi itu - halus tapi mungkin perubahan perilaku yang tidak disukai.Untuk lebih banyak konteks, beberapa diskusi tidak lengkap tentang perubahan penanganan
checked
atribut / properti dalam transisi dari 1.5.x ke 1.6 dapat ditemukan di catatan rilis versi 1.6 dan bagian Atribut vs Properti dari.prop()
dokumentasi .sumber
DOMElement.checked = true
". Tapi itu bisa diabaikan, karena itu hanya satu elemen ...$(element).prop('checked')
adalah pemborosan mengetik.element.checked
ada dan harus digunakan dalam kasus-kasus di mana Anda sudah memilikielement
Menggunakan:
Dan jika Anda ingin memeriksa apakah kotak centang dicentang atau tidak:
sumber
Ini adalah cara yang benar untuk memeriksa dan menghapus centang pada kotak centang dengan jQuery, karena ini adalah standar lintas-platform, dan akan memungkinkan repost formulir.
Dengan melakukan ini, Anda menggunakan standar JavaScript untuk memeriksa dan menghapus centang pada kotak centang, sehingga peramban yang mengimplementasikan properti "kotak centang" elemen kotak centang dengan benar akan menjalankan kode ini dengan sempurna. Ini harus semua browser utama, tetapi saya tidak dapat menguji sebelum Internet Explorer 9.
Masalahnya (jQuery 1.6):
Setelah pengguna mengklik kotak centang, kotak centang itu berhenti merespons perubahan atribut yang "dicentang".
Berikut adalah contoh atribut kotak centang gagal melakukan pekerjaan setelah seseorang mengklik kotak centang (ini terjadi di Chrome).
Biola
Solusinya:
Dengan menggunakan properti "dicentang" JavaScript pada elemen DOM , kami dapat menyelesaikan masalah secara langsung, alih-alih mencoba memanipulasi DOM agar melakukan apa yang kami inginkan .
Biola
Plugin ini akan mengubah properti yang dicentang dari setiap elemen yang dipilih oleh jQuery, dan berhasil memeriksa dan menghapus centang pada kotak dalam semua keadaan. Jadi, sementara ini mungkin tampak seperti solusi over-bearing, itu akan membuat pengalaman pengguna situs Anda lebih baik, dan membantu mencegah frustrasi pengguna.
Atau, jika Anda tidak ingin menggunakan plugin, Anda dapat menggunakan potongan kode berikut:
sumber
removeAttr('checked')
daripadaattr('checked', false)
checked
perubahan atribut, terlepas dari metode yang digunakan untuk mengubahnya.$('.myCheckBox').prop('checked', true)
Dengan begitu, itu akan secara otomatis berlaku untuk seluruh rangkaian elemen yang cocok (hanya saat pengaturan sekalipun, mendapatkan masih yang pertama)prop
jelas merupakan cara yang tepat untuk mengatur atribut pada suatu elemen.Anda dapat melakukan
atau
Jika Anda memiliki kode khusus di acara onclick untuk kotak centang yang ingin Anda jalankan, gunakan yang ini sebagai gantinya:
Anda dapat menghapus centang dengan menghapus atribut seluruhnya:
Anda dapat mencentang semua kotak centang seperti ini:
sumber
$(".myCheckbox").click()
.attr
alih-alih.prop
.$("#mycheckbox").click();
bekerja untuk saya karena saya juga mendengarkan acara perubahan dan.attr
&.prop
tidak memecat acara perubahan.Anda juga dapat memperluas objek $ .fn dengan metode baru:
Maka Anda bisa melakukan:
Atau Anda mungkin ingin memberi mereka lebih banyak nama unik seperti mycheck () dan myuncheck () jika Anda menggunakan perpustakaan lain yang menggunakan nama-nama itu.
sumber
.attr
alih-alih.prop
.Yang terakhir akan mem-klik event klik untuk kotak centang, yang lain tidak. Jadi, jika Anda memiliki kode khusus di acara onclick untuk kotak centang yang ingin Anda jalankan, gunakan yang terakhir.
sumber
.attr
alih-alih.prop
.click
acara tidak dapat diandalkan di Firefox dan Edge.Untuk mencentang kotak centang yang harus Anda gunakan
atau
dan untuk menghapus centang pada kotak centang Anda harus selalu mengaturnya ke false:
Jika kamu melakukan
itu menghapus semua atribut bersama-sama dan karena itu Anda tidak akan dapat mengatur ulang formulir.
BAD DEMO jQuery 1.6 . Saya pikir ini rusak. Untuk 1.6, saya akan membuat posting baru tentang itu.
DEMO KERJA BARU jQuery 1.5.2 bekerja di Chrome.
Keduanya menggunakan demo
sumber
$(".mycheckbox").prop("checked", true/false)
Ini memilih elemen yang memiliki atribut yang ditentukan dengan nilai yang mengandung substring "ckbItem" yang diberikan:
Ini akan memilih semua elemen yang mengandung ckbItem dalam atribut namanya.
sumber
Dengan asumsi bahwa pertanyaannya adalah ...
Bagaimana cara saya memeriksa set-kotak centang BY VALUE?
Ingat bahwa dalam set kotak centang tipikal, semua tag input memiliki nama yang sama, mereka berbeda berdasarkan atribut
value
: tidak ada ID untuk setiap input set.Jawaban Xian dapat diperpanjang dengan pemilih yang lebih spesifik , menggunakan baris kode berikut:
sumber
Saya melewatkan solusi. Saya akan selalu menggunakan:
sumber
.val()
akan selalu kembaliundefined
ketika dipanggil pada 0 elemen untuk mendeteksi bahwa objek jQuery kosong, ketika Anda bisa cukup periksa.length
saja) - lihat stackoverflow.com/questions/901712/… untuk pendekatan yang lebih mudah dibaca.Untuk memeriksa kotak centang menggunakan jQuery 1.6 atau lebih tinggi lakukan ini:
Untuk menghapus centang, gunakan:
Inilah yang ingin saya gunakan untuk mengaktifkan kotak centang menggunakan jQuery:
Jika Anda menggunakan jQuery 1.5 atau lebih rendah:
Untuk menghapus centang, gunakan:
sumber
Inilah cara untuk melakukannya tanpa jQuery
sumber
Berikut adalah kode untuk dicentang dan tidak dicentang dengan tombol:
Pembaruan: Ini adalah blok kode yang sama menggunakan metode prop Jquery 1.6+ yang lebih baru, yang menggantikan attr:
sumber
.attr
alih-alih.prop
.Coba ini:
sumber
Kita bisa menggunakan
elementObject
jQuery untuk memeriksa atribut:Kita dapat menggunakan ini untuk semua versi jQuery tanpa kesalahan.
Pembaruan: Jquery 1.6+ memiliki metode penyangga baru yang menggantikan attr, misalnya:
sumber
.attr
alih-alih.prop
.Jika Anda menggunakan PhoneGap melakukan pengembangan aplikasi, dan Anda memiliki nilai pada tombol yang ingin Anda tampilkan secara instan, jangan lupa lakukan ini
Saya menemukan bahwa tanpa rentang, antarmuka tidak akan memperbarui apa pun yang Anda lakukan.
sumber
Berikut adalah kode dan demo untuk cara memeriksa beberapa kotak centang ...
http://jsfiddle.net/tamilmani/z8TTt/
sumber
$("#check")
dengan panggilan API DOM mentahdocument.getElementsByTagName("input")
sepertinya tidak cocok bagi saya, terutama mengingat bahwafor
loop di sini dapat dihindari dengan menggunakan.prop()
. Bagaimanapun ini adalah jawaban terlambat lain yang tidak menambahkan sesuatu yang baru.Solusi lain yang mungkin:
sumber
Seperti yang dikatakan @ livefree75:
jQuery 1.5.x dan di bawah
Anda juga dapat memperluas objek $ .fn dengan metode baru:
Tetapi dalam versi baru jQuery, kita harus menggunakan sesuatu seperti ini:
jQuery 1.6+
Maka Anda bisa melakukan:
sumber
Jika menggunakan seluler dan Anda ingin antarmuka memperbarui dan menampilkan kotak centang sebagai tidak dicentang, gunakan yang berikut:
sumber
Waspadai kebocoran memori di Internet Explorer sebelum Internet Explorer 9 , karena dokumentasi jQuery menyatakan :
sumber
.prop('checked',true)
.Untuk jQuery 1.6+
Untuk jQuery 1.5.x dan di bawah
Untuk memeriksa,
sumber
Untuk memeriksa dan menghapus centang
sumber
sumber
Ini mungkin solusi terpendek dan termudah:
atau
Bahkan lebih pendek adalah:
Berikut ini adalah sebuah jsFiddle juga.
sumber
JavaScript polos sangat sederhana dan lebih sedikit overhead:
Contoh di sini
sumber
Saya tidak bisa membuatnya bekerja menggunakan:
Benar dan salah akan memeriksa kotak centang. Apa yang berhasil untuk saya adalah:
sumber
true
danfalse
dan tidak'true'
dan'false'
?'false'
dikonversi ke nilai boolean yang mengakibatkantrue
- string kosong dievaluasifalse
sehingga "bekerja". Lihat biola ini misalnya apa yang saya maksud.Ketika Anda mencentang kotak centang seperti;
itu mungkin tidak cukup. Anda juga harus memanggil fungsi di bawah ini;
Terutama ketika Anda menghapus atribut centang kotak centang.
sumber
Inilah jawaban lengkapnya menggunakan jQuery
Saya mengujinya dan berfungsi 100%: D
sumber
Di jQuery,
atau
Dalam JavaScript,
sumber
.attr
alih-alih.prop
.