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.