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

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


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;

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

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.


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

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

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.


2

Pour un contrôle unique, essayez

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

pour plusieurs essais


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()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.