Saya ingin acara memecat sisi klien ketika kotak centang dicentang / tidak dicentang:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
Pada dasarnya saya ingin itu terjadi untuk setiap kotak centang di halaman. Apakah metode ini menembakkan klik dan memeriksa keadaan ok?
Saya pikir pasti ada cara jQuery yang lebih bersih. Adakah yang tahu solusinya?
javascript
jquery
event-handling
AnonyMouse
sumber
sumber
Jawaban:
Bind ke
change
acara, bukanclick
. Namun, Anda mungkin masih perlu memeriksa apakah kotak centang dicentang:Manfaat utama dari pengikatanRedacted dalam komentarchange
acaraclick
tersebut adalah tidak semua klik pada kotak centang akan menyebabkannya berubah. Jika Anda hanya ingin menangkap peristiwa yang menyebabkan kotak centang berubah status, Anda ingin acara yang diberi nama tepatchange
.Perhatikan juga bahwa saya telah menggunakan
this.checked
alih-alih membungkus elemen dalam objek jQuery dan menggunakan metode jQuery, hanya karena lebih pendek dan lebih cepat untuk mengakses properti elemen DOM secara langsung.Edit (lihat komentar)
Untuk mendapatkan semua kotak centang, Anda memiliki beberapa opsi. Anda dapat menggunakan
:checkbox
pemilih-semu:Atau Anda dapat menggunakan atribut sama dengan pemilih:
sumber
$(this).is(':checked')
. Saya pikir Anda harus menggunakanchange
acara tersebut jika Anda ingin mendeteksi perubahan dari keyboard (menabrak, memukul ruang), tetapi yang mengejutkan,click
juga mendeteksi perubahan yang bukan dari klik mouse, tidak yakin apakah itu masalah jQuery, jsfiddle.net / mendesjuan / E39szclick
,change
atau apa pun ke semua kotak centang pada halaman dapat menyebabkan masalah kinerja (bergantung pada jumlah kotak centang). Cobalah mengikat ke elemen induk atau dokumen dan menangkap peristiwa menggelegak yaitu$('form').on('change', ':checkbox', function(){ //stuff });
Untuk referensi di masa mendatang kepada siapa pun di sini yang mengalami kesulitan, jika Anda menambahkan kotak centang secara dinamis, jawaban yang diterima yang benar di atas tidak akan berfungsi. Anda harus memanfaatkan delegasi acara yang memungkinkan simpul induk untuk menangkap peristiwa yang menggelegak dari keturunan tertentu dan mengeluarkan panggilan balik.
Perhatikan bahwa hampir selalu tidak perlu digunakan
document
untuk pemilih induk. Alih-alih memilih node induk yang lebih spesifik untuk mencegah penyebaran acara ke level terlalu banyak.Contoh di bawah ini menampilkan bagaimana peristiwa node dom yang ditambahkan secara dinamis tidak memicu pendengar yang ditentukan sebelumnya.
Sementara contoh ini menampilkan penggunaan delegasi acara untuk menangkap peristiwa untuk simpul tertentu (
h1
dalam kasus ini), dan mengeluarkan panggilan balik untuk acara tersebut.sumber
Hanya solusi lain
sumber
Jika maksud Anda adalah untuk melampirkan acara hanya pada kotak centang yang dicentang (jadi itu akan menyala ketika mereka tidak dicentang dan diperiksa lagi nanti) maka inilah yang Anda inginkan.
jika niat Anda adalah untuk melampirkan acara ke semua kotak centang (dicentang dan tidak dicentang)
jika Anda ingin menjalankannya hanya ketika mereka diperiksa (dari tidak dicentang) maka @James Allardice menjawab di atas.
BTW
input[type='checkbox']:checked
adalah pemilih CSS.sumber
$("input[type='checkbox']:not(:checked)")
sumber
sumber
mungkin ini bisa menjadi alternatif untuk Anda.
sumber
Ini adalah solusi untuk menemukan apakah kotak centang dicentang atau tidak. Gunakan fungsi #prop () //
sumber
Coba validasi jQuery ini
sumber
Sangat sederhana, ini cara saya menggunakan:
JQuery:
Salam!
sumber