Centang / Hapus centang pada kotak dengan JavaScript (jQuery atau vanilla)?


Jawaban:


976

Javascript:

// Check
document.getElementById("checkbox").checked = true;

// Uncheck
document.getElementById("checkbox").checked = false;

jQuery (1.6+):

// Check
$("#checkbox").prop("checked", true);

// Uncheck
$("#checkbox").prop("checked", false);

jQuery (1.5-):

// Check
$("#checkbox").attr("checked", true);

// Uncheck
$("#checkbox").attr("checked", false);

Menggunakan .prop tampaknya tidak berfungsi dengan Jquery 1.11.2 di Firefox dengan file yang di-host secara lokal. .attr tidak. Saya belum diuji lebih lengkap. Berikut kodenya: `` `personContent.find (" [data-name = '"+ pass.name +"'] "). Children ('input'). Attr ('checked', true); `` `
Andrew Downes

3
Haruskah kita lebih suka menggunakan attratau prop?
Hitam

15
Rupanya .checked = true/falsetidak memicu changeacara: - \
leaf

1
@ albert: mengapa Anda mengubah tugas untuk tes kesetaraan yang ketat? Anda memecahkan jawabannya.
Martijn Pieters

kamu benar. itu sepenuhnya salahku. maaf soal itu
albert

136

Perilaku penting yang belum disebutkan:

Secara terprogram mengatur atribut yang dicentang , tidak memunculkan changeevent kotak centang .

Lihat sendiri di biola ini:
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(Fiddle diuji di Chrome 46, Firefox 41 dan IE 11)

The click()metode

Suatu hari Anda mungkin menemukan diri Anda menulis kode, yang bergantung pada acara yang dipecat. Untuk memastikan acara tersebut menyala, panggil click()metode elemen kotak centang, seperti ini:

document.getElementById('checkbox').click();

Namun, ini mengubah status kotak centang yang dicentang, alih-alih secara khusus mengaturnya ke trueatau false. Ingat bahwa changeacara hanya boleh diaktifkan, ketika atribut yang diperiksa benar-benar berubah.

Ini juga berlaku untuk cara jQuery: mengatur atribut menggunakan propatau attr, tidak mem- changeevent.

Pengaturan checkedke nilai tertentu

Anda bisa menguji checkedatributnya, sebelum memanggil click()metode. Contoh:

function toggle(checked) {
  var elm = document.getElementById('checkbox');
  if (checked != elm.checked) {
    elm.click();
  }
}

Baca lebih lanjut tentang metode klik di sini:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


8
Itu jawaban yang bagus tetapi secara pribadi saya lebih suka memecat acara perubahan daripada memanggil klik () elm.dispatchEvent(new Event('change'));
Victor Sharovatov

@VictorSharovatov Mengapa Anda lebih suka memecat acara perubahan?
PeterCo

2
Saya hanya dapat menyetujui sebagian - banyak browser web dengan AdBlocks membela DOM dari mengklik virtual () karena tindakan yang tidak diinginkan dari iklan
pkolawa

2
@PeterCo: Mungkin karena lebih jelas menggambarkan niat - klik elemen untuk memecat acara perubahan versus mengirimkan acara perubahan untuk memecat acara perubahan - tidak langsung (klik memicu perubahan) versus langsung. Yang terakhir ini jauh lebih jelas dan tidak mengharuskan pembaca untuk mengetahui bahwa klik memicu perubahan.
Bill Dagg

37

untuk memeriksa:

document.getElementById("id-of-checkbox").checked = true;

untuk menghapus centang:

document.getElementById("id-of-checkbox").checked = false;

2
Itu hanya akan mengubah atribut yang diperiksa. Namun, klik dan acara serupa tidak akan dipicu.
Paul Stelian

17

Kami dapat memeriksa kotak centang partikulat sebagai,

$('id of the checkbox')[0].checked = true

dan hapus centang oleh,

$('id of the checkbox')[0].checked = false

1
Anda benar-benar tidak memerlukan indeks array jika Anda hanya memilih satu elemen. Tapi saya kira jika Anda ingin eksplisit. haha
Rizowski

6
@ Rizizki Anda perlu indeks untuk mendapatkan elemen html asli - objek jQuery tidak memiliki properti "dicentang"
Henrik Christensen

Ini berhasil bagi saya. Tanpa indeks array, saya mendapatkan kesalahan yang tidak terdefinisi. Terima kasih banyak, menyelamatkan hari saya.
Neri

15

Saya ingin mencatat, bahwa pengaturan atribut 'diperiksa' ke string yang tidak kosong mengarah ke kotak centang.

Jadi, jika Anda menetapkan atribut 'dicentang' ke "false" , kotak centang akan diperiksa. Saya harus mengatur nilai ke string kosong, nol atau nilai boolean salah untuk memastikan kotak centang tidak dicentang.


5
Ini karena string yang tidak kosong dianggap sebagai kebenaran.
James Coyle

10

Coba ini:

//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');

//UnCheck
document.getElementById('chk').removeAttribute('checked');

6
<script type="text/javascript">
    $(document).ready(function () {
        $('.selecctall').click(function (event) {
            if (this.checked) {
                $('.checkbox1').each(function () {
                    this.checked = true;
                });
            } else {
                $('.checkbox1').each(function () {
                    this.checked = false;
                });
            }
        });

    });

</script>

6
function setCheckboxValue(checkbox,value) {
    if (checkbox.checked!=value)
        checkbox.click();
}

3

Jika, karena alasan tertentu, Anda tidak ingin (atau tidak bisa) menjalankan .click()elemen pada kotak centang, Anda cukup mengubah nilainya secara langsung melalui properti .checked-nya ( atribut IDL dari<input type="checkbox"> ).

Perhatikan bahwa hal tersebut tidak memecat peristiwa yang biasanya terkait ( perubahan ) sehingga Anda harus memecatnya secara manual untuk mendapatkan solusi lengkap yang berfungsi dengan penangan acara terkait.

Berikut ini contoh fungsional dalam javascript mentah (ES6):

class ButtonCheck {
  constructor() {
    let ourCheckBox = null;
    this.ourCheckBox = document.querySelector('#checkboxID');

    let checkBoxButton = null;
    this.checkBoxButton = document.querySelector('#checkboxID+button[aria-label="checkboxID"]');

    let checkEvent = new Event('change');
    
    this.checkBoxButton.addEventListener('click', function() {
      let checkBox = this.ourCheckBox;

      //toggle the checkbox: invert its state!
      checkBox.checked = !checkBox.checked;

      //let other things know the checkbox changed
      checkBox.dispatchEvent(checkEvent);
    }.bind(this), true);

    this.eventHandler = function(e) {
      document.querySelector('.checkboxfeedback').insertAdjacentHTML('beforeend', '<br />Event occurred on checkbox! Type: ' + e.type + ' checkbox state now: ' + this.ourCheckBox.checked);

    }


    //demonstration: we will see change events regardless of whether the checkbox is clicked or the button

    this.ourCheckBox.addEventListener('change', function(e) {
      this.eventHandler(e);
    }.bind(this), true);

    //demonstration: if we bind a click handler only to the checkbox, we only see clicks from the checkbox

    this.ourCheckBox.addEventListener('click', function(e) {
      this.eventHandler(e);
    }.bind(this), true);


  }
}

var init = function() {
  const checkIt = new ButtonCheck();
}

if (document.readyState != 'loading') {
  init;
} else {
  document.addEventListener('DOMContentLoaded', init);
}
<input type="checkbox" id="checkboxID" />

<button aria-label="checkboxID">Change the checkbox!</button>

<div class="checkboxfeedback">No changes yet!</div>

Jika Anda menjalankan ini dan mengklik kotak centang dan tombol, Anda harus memahami cara kerjanya.

Perhatikan bahwa saya menggunakan document.querySelector untuk singkatnya / kesederhanaan, tetapi ini dapat dengan mudah dibangun untuk memiliki ID yang diberikan diteruskan ke konstruktor, atau itu bisa berlaku untuk semua tombol yang bertindak sebagai aria-label untuk kotak centang (perhatikan bahwa saya tidak repot-repot mengatur id pada tombol dan memberikan kotak centang aria-labelledby, yang harus dilakukan jika menggunakan metode ini) atau sejumlah cara lain untuk memperluas ini. Dua yang terakhir addEventListenerhanya untuk mendemonstrasikan cara kerjanya.


2

Untuk uji coba tunggal

myCheckBox.checked=1
<input type="checkbox" id="myCheckBox"> Call to her

untuk multi coba


2

Saya setuju dengan jawaban saat ini, tetapi dalam kasus saya itu tidak berfungsi, saya harap kode ini membantu seseorang di masa depan:

// check
$('#checkbox_id').click()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.