Cochez / décochez la case avec JavaScript (jQuery ou vanilla)?

Réponses:

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);
Alex Peattie
la source
L'utilisation de .prop ne semble pas fonctionner avec Jquery 1.11.2 dans Firefox avec des fichiers hébergés localement. .attr le fait. Je n'ai pas testé plus complètement. Voici le code: `` `personContent.find (" [data-name = '"+ pass.name +"'] "). Children ('input'). Attr ('checked', true); ``
Andrew Downes
3
Faut-il plutôt utiliser attrou prop?
Black
15
Apparemment, .checked = true/falsene déclenche pas l' changeévénement: - \
leaf
1
@albert: pourquoi avez-vous changé les affectations en tests d'égalité strictes? Vous avez cassé la réponse.
Martijn Pieters
tu as raison. c'est mon mal entièrement. désolé
albert
136

Comportement important qui n'a pas encore été mentionné:

La définition par programme de l' attribut vérifié ne déclenche pas l' changeévénement de la case à cocher .

Voyez par vous-même dans ce violon:
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(Fiddle testé dans Chrome 46, Firefox 41 et IE 11)

La click()méthode

Un jour, vous pourriez vous retrouver à écrire du code, qui dépend du déclenchement de l'événement. Pour vous assurer que l'événement se déclenche, appelez leclick() méthode de l'élément checkbox, comme ceci:

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

Cependant, cela bascule l'état vérifié de la case à cocher, au lieu de la définir spécifiquement sur true ou false. N'oubliez pas que l' changeévénement ne doit se déclencher que lorsque l'attribut vérifié change réellement.

Cela s'applique également à la méthode jQuery: définition de l'attribut à l'aide prop ou attrne déclenche pas l' changeévénement.

Définition checkedd'une valeur spécifique

Vous pouvez tester le checked attribut avant d'appeler la click()méthode. Exemple:

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

En savoir plus sur la méthode de clic ici:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

sudoqux
la source
8
C'est une bonne réponse, mais personnellement, je préférerais déclencher l'événement de changement au lieu d'appeler le clic () elm.dispatchEvent(new Event('change'));
Victor Sharovatov
@VictorSharovatov Pourquoi préféreriez-vous déclencher l'événement de changement?
PeterCo
2
Je ne suis d'accord que partiellement - de nombreux navigateurs Web avec AdBlocks défendent le DOM contre les clics virtuels () en raison d'actions indésirables des annonces
pkolawa
2
@PeterCo: Probablement parce qu'il décrit plus clairement l'intention - cliquez sur l'élément pour déclencher l'événement de modification par rapport à l'envoi d'un événement de modification pour déclencher un événement de modification - indirect (le clic déclenche la modification) par rapport à direct. Ce dernier est beaucoup plus clair et ne nécessite pas que le lecteur sache qu'un clic déclenche un changement.
Bill Dagg
37

vérifier:

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

à décocher:

document.getElementById("id-of-checkbox").checked = false;
topherg
la source
2
Cela ne ferait que modifier l'attribut vérifié. Cependant, onclick et les événements similaires ne seront pas déclenchés.
Paul Stelian
17

Nous pouvons cocher une case à cocher comme,

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

et décochez par,

$('id of the checkbox')[0].checked = false
AKS
la source
1
Vous n'avez vraiment pas besoin de l'index du tableau si vous ne sélectionnez qu'un seul élément. Mais je suppose que si vous voulez être explicite. haha
Rizowski
6
@Rizowski Vous avez besoin de l'index pour obtenir l'élément natif html - les objets jQuery n'ont pas de propriété "vérifiée"
Henrik Christensen
Cela a fonctionné pour moi. Sans l'index du tableau, j'obtenais une erreur non définie. Merci beaucoup, ça m'a sauvé la journée.
Neri
15

Je voudrais noter que la définition de l'attribut «vérifié» sur une chaîne non vide conduit à une case cochée.

Donc, si vous définissez l'attribut «vérifié» sur «faux» , la case à cocher sera cochée. J'ai dû définir la valeur sur la chaîne vide, null ou la valeur booléenne false afin de m'assurer que la case à cocher n'était pas cochée.

Jan Rasehorn
la source
5
En effet, une chaîne non vide est considérée comme véridique.
James Coyle
10

Essaye ça:

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

//UnCheck
document.getElementById('chk').removeAttribute('checked');
Syed Jamil Uddin
la source
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>
M.Owais
la source
6
function setCheckboxValue(checkbox,value) {
    if (checkbox.checked!=value)
        checkbox.click();
}
kandi
la source
3

Si, pour une raison quelconque, vous ne voulez pas (ou ne pouvez pas) exécuter un .click()élément sur la case à cocher, vous pouvez simplement changer sa valeur directement via sa propriété .checked (un attribut IDL de <input type="checkbox">).

Notez que cela ne déclenche pas l'événement normalement lié ( modification ), vous devrez donc le déclencher manuellement pour avoir une solution complète qui fonctionne avec tous les gestionnaires d'événements associés.

Voici un exemple fonctionnel en javascript brut (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>

Si vous exécutez cela et cliquez sur la case à cocher et sur le bouton, vous devriez avoir une idée de comment cela fonctionne.

Notez que j'ai utilisé document.querySelector pour la brièveté / simplicité, mais cela pourrait facilement être construit pour avoir un ID donné transmis au constructeur, ou il pourrait s'appliquer à tous les boutons qui agissent comme des étiquettes aria pour une case à cocher (notez que je n'a pas pris la peine de définir un identifiant sur le bouton et de donner à la case à cocher un aria-labelledby, ce qui devrait être fait si vous utilisez cette méthode) ou un certain nombre d'autres façons de l'étendre. Les deux derniers addEventListeners sont juste pour démontrer comment cela fonctionne.

taswyn
la source
2

Pour un contrôle unique, essayez

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

pour plusieurs essais

Kamil Kiełczewski
la source
2

Je suis d'accord avec les réponses actuelles, mais dans mon cas cela ne fonctionne pas, j'espère que ce code aidera quelqu'un à l'avenir:

// check
$('#checkbox_id').click()
Udhav Sarvaiya
la source