Seleziona / Deseleziona la casella di controllo con JavaScript (jQuery o vanilla)?


Risposte:


977

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);

L'uso di .prop non sembra funzionare con Jquery 1.11.2 in Firefox con file ospitati localmente. .attr lo fa. Non ho testato più a fondo. Ecco il codice: `` personContent.find ("[data-name = '" + pass.name + "']"). Children ('input'). Attr ('checked', true); ``
Andrew Downes,

3
Dovremmo piuttosto usare attro prop?
Nero

15
Apparentemente .checked = true/falsenon attiva l' changeevento: - \
foglia

1
@albert: perché hai cambiato i compiti in severi test di uguaglianza? Hai rotto la risposta.
Martijn Pieters

hai ragione. questo è il mio male del tutto. mi dispiace per questo
albert,

136

Comportamento importante che non è stato ancora menzionato:

L'impostazione a livello di programmazione dell'attributo controllato , non attiva l' changeevento della casella di controllo .

Guarda tu stesso in questo violino:
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(Fiddle testato in Chrome 46, Firefox 41 e IE 11)

Il click()metodo

Un giorno potresti ritrovarti a scrivere codice, che si basa sull'evento che viene generato. Per assicurarsi che l'evento venga generato, chiama il click()metodo dell'elemento checkbox, in questo modo:

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

Tuttavia, questo attiva o disattiva lo stato selezionato della casella di controllo, anziché impostarlo specificamente su trueo false. Ricorda che l' changeevento dovrebbe attivarsi solo quando l'attributo controllato cambia effettivamente.

Si applica anche al modo jQuery: l'impostazione dell'attributo utilizzando propo attr, non attiva l' changeevento.

Impostazione checkedsu un valore specifico

È possibile verificare l' checkedattributo prima di chiamare il click()metodo. Esempio:

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

Maggiori informazioni sul metodo di clic qui:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


8
Questa è una buona risposta, ma personalmente preferirei elm.dispatchEvent(new Event('change'));
attivare

@VictorSharovatov Perché preferiresti attivare l'evento change?
PeterCo

2
Posso essere d'accordo solo parzialmente: molti browser Web con AdBlocks difendono il DOM dai clic virtuali () a causa di azioni indesiderate dagli annunci
pkolawa,

2
@PeterCo: Probabilmente perché ritrae più chiaramente l'intento - fai clic sull'elemento per attivare l'evento di modifica rispetto a inviare un evento di modifica per generare un evento di modifica - indiretto (clic attiva la modifica) rispetto a diretto. Quest'ultimo è notevolmente più chiaro e non richiede al lettore di sapere che un clic genera una modifica.
Bill Dagg,

37

controllare:

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

per deselezionare:

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

2
Ciò cambierebbe solo l'attributo controllato. Tuttavia, onclick e eventi simili non verranno attivati.
Paul Stelian,

17

Possiamo selezionare una casella di controllo del particolato come

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

e deseleziona da,

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

1
In realtà non è necessario l'indice di array se si seleziona solo un elemento. Ma immagino che tu voglia essere esplicito. haha
Rizowski il

6
@Rizowski È necessario l'indice per ottenere l'elemento html nativo - gli oggetti jQuery non hanno una proprietà "controllata"
Henrik Christensen,

Questo ha funzionato per me. Senza l'indice dell'array, ottenevo un errore indefinito. Grazie mille, mi ha salvato la giornata.
Neri,

15

Vorrei sottolineare che l'impostazione dell'attributo 'controllato' su una stringa non vuota porta a una casella selezionata.

Pertanto, se si imposta l'attributo 'controllato' su "falso" , la casella sarà selezionata. Ho dovuto impostare il valore sulla stringa vuota, null o il valore booleano false per assicurarmi che la casella di controllo non fosse selezionata.


5
Questo perché una stringa non vuota è considerata vera.
James Coyle,

10

Prova questo:

//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

Se, per qualche motivo, non vuoi (o non puoi) eseguire un .click()elemento nella casella di controllo, puoi semplicemente modificarne il valore direttamente tramite la sua proprietà .checked (un attributo IDL di <input type="checkbox">).

Notare che ciò non genera l'evento normalmente correlato ( modifica ), quindi è necessario attivarlo manualmente per avere una soluzione completa che funzioni con tutti i gestori di eventi correlati.

Ecco un esempio funzionale in javascript non elaborato (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>

Se lo esegui e fai clic sulla casella di controllo e sul pulsante, dovresti avere un'idea di come funziona.

Nota che ho usato document.querySelector per brevità / semplicità, ma questo potrebbe essere facilmente costruito per avere un determinato ID passato al costruttore, oppure potrebbe essere applicato a tutti i pulsanti che fungono da etichette aria per una casella di controllo (nota che I non si è preso la briga di impostare un ID sul pulsante e di dare alla casella un'etichetta aria, che dovrebbe essere fatto se si utilizza questo metodo) o qualsiasi altro modo per espanderlo. Gli ultimi due addEventListenersecondi sono solo per dimostrare come funziona.


2

Per un singolo controllo provare

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

per più tentativi


2

Sono d'accordo con le risposte attuali, ma nel mio caso non funziona, spero che questo codice aiuti qualcuno in futuro:

// check
$('#checkbox_id').click()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.