Définition de «coché» pour une case à cocher avec jQuery


4133

J'aimerais faire quelque chose comme ça pour cocher une checkbox utilisant jQuery :

$(".myCheckBox").checked(true);

ou

$(".myCheckBox").selected(true);

Une telle chose existe-t-elle?


Une question plus spécifique (et très utile!), "Comment puis-je vérifier un élément dans un ensemble de cases à cocher PAR VALEUR?", Je pense que nous pouvons également discuter ici, et j'ai posté une réponse ci-dessous.
Peter Krauss

Vérifiez d'autres façons de le faire en utilisant jQuery ici stackoverflow.com/a/22019103/1868660
Subodh Ghulaxe

Si vous avez besoin que l'événement onchange soit déclenché, c'est$("#mycheckbox").click();
HumanInDisguise

"Vérifier quelque chose" suggère de le tester, donc je pense que "Faire une case à cocher cochée" est un titre plus clair et meilleur.
Alireza

soutenir(); la fonction est la réponse parfaite. Voir la définition de la fonction - api.jquery.com/prop
yogihosting

Réponses:


5969

JQuery moderne

Utilisation .prop():

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

API DOM

Si vous travaillez avec un seul élément, vous pouvez toujours simplement accéder au sous-jacent HTMLInputElementet modifier sa .checkedpropriété:

$('.myCheckbox')[0].checked = true;
$('.myCheckbox')[0].checked = false;

L'avantage d'utiliser les .prop()et.attr() méthodes au lieu de cela est qu'elles fonctionneront sur tous les éléments correspondants.

jQuery 1.5.x et inférieur

La .prop()méthode n'est pas disponible, vous devez donc l'utiliser .attr().

$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);

Notez que c'est l'approche utilisée par les tests unitaires de jQuery avant la version 1.6 et qu'il est préférable d'utiliser $('.myCheckbox').removeAttr('checked');car cette dernière va, si la case a été initialement cochée, changer le comportement d'un appel à .reset()sur n'importe quel formulaire qui la contient - un subtil mais probablement changement de comportement indésirable.

Pour plus de contexte, une discussion incomplète des modifications apportées à la gestion de l' checkedattribut / propriété dans la transition de 1.5.x à 1.6 peut être trouvée dans les notes de publication de la version 1.6 et la section Attributs contre propriétés de la .prop()documentation .


26
@Xian la suppression de l'attribut vérifié rend impossible la réinitialisation du formulaire
mcgrailm

6
En guise de remarque, jQuery 1.6.1 devrait résoudre le problème que j'ai mentionné, afin que nous puissions tous continuer à utiliser $ (...). Prop (...)
cwharris

19
"Si vous travaillez avec un seul élément, il sera toujours plus rapide à utiliser DOMElement.checked = true". Mais ce serait négligeable, car ce n'est qu'un élément ...
Tyler Crompton

47
Comme le dit Tyler, il s'agit d'une amélioration négligeable des performances. Pour moi, le codage à l'aide d'une API commune le rend plus lisible que le mélange d'API natives et d'API jQuery. Je resterais avec jQuery.
Charlie Kilian

18
@TylerCrompton - Bien sûr, ce n'est pas entièrement une question de performances, mais faire $(element).prop('checked')est un gaspillage complet de frappe. element.checkedexiste et doit être utilisé dans les cas où vous en avez déjàelement
gnarf

705

Utilisation:

$(".myCheckbox").attr('checked', true); // Deprecated
$(".myCheckbox").prop('checked', true);

Et si vous voulez vérifier si une case est cochée ou non:

$('.myCheckbox').is(':checked');

4
également $ (sélecteur). coché pour vérifier est vérifié
eomeroff

6
J'ai essayé ce code exact et cela n'a pas fonctionné pour moi dans le cas d'une case à cocher sélectionner tout / sélectionner aucun qui doit tout cocher et décocher ainsi que vérifier leur état. Au lieu de cela, j'ai essayé la réponse de @Christopher Harris et cela a fait l'affaire.
JD Smith

Pourquoi utiliser "form #mycheckbox" au lieu de simplement "#mycheckbox"? L'identifiant est déjà unique dans tout le document, il est plus rapide et plus simple de le choisir directement.
YuriAlbuquerque

@YuriAlbuquerque c'était un exemple. vous pouvez utiliser le sélecteur de votre choix.
bchhun

5
$ (sélecteur) .checked ne fonctionne pas. Il n'y a pas de méthode «vérifiée» dans jQuery.
Brendan Byrd

318

C'est la bonne façon de cocher et de décocher les cases à cocher avec jQuery, car c'est une norme multiplateforme, et cela permettra des reposts de formulaire.

$('.myCheckBox').each(function(){ this.checked = true; });

$('.myCheckBox').each(function(){ this.checked = false; });

En faisant cela, vous utilisez les normes JavaScript pour cocher et décocher les cases à cocher, donc tout navigateur qui implémente correctement la propriété "vérifié" de l'élément checkbox exécutera ce code sans problème. Cela devrait être tous les principaux navigateurs, mais je ne peux pas tester avant Internet Explorer 9.

Le problème (jQuery 1.6):

Une fois qu'un utilisateur clique sur une case à cocher, cette case à cocher cesse de répondre aux modifications d'attribut "vérifié".

Voici un exemple de l'attribut de case à cocher qui ne fait pas le travail après que quelqu'un a cliqué sur la case à cocher (cela se produit dans Chrome).

Violon

La solution:

En utilisant la propriété "vérifiée" de JavaScript sur les éléments DOM , nous sommes en mesure de résoudre le problème directement, au lieu d'essayer de manipuler le DOM pour qu'il fasse ce que nous voulons qu'il fasse.

Violon

Ce plugin va modifier la propriété vérifiée de tous les éléments sélectionnés par jQuery, et cocher et décocher avec succès les cases à cocher en toutes circonstances. Ainsi, bien que cela puisse sembler une solution excessive, cela améliorera l'expérience utilisateur de votre site et aidera à éviter la frustration des utilisateurs.

(function( $ ) {
    $.fn.checked = function(value) {
        if(value === true || value === false) {
            // Set the value of the checkbox
            $(this).each(function(){ this.checked = value; });
        } 
        else if(value === undefined || value === 'toggle') {
            // Toggle the checkbox
            $(this).each(function(){ this.checked = !this.checked; });
        }

        return this;
    };
})( jQuery );

Alternativement, si vous ne souhaitez pas utiliser de plug-in, vous pouvez utiliser les extraits de code suivants:

// Check
$(':checkbox').prop('checked', true);

// Un-check
$(':checkbox').prop('checked', false);

// Toggle
$(':checkbox').prop('checked', function (i, value) {
    return !value;
});

5
Dans votre premier exemple JSFiddle, vous devriez utiliser removeAttr('checked')plutôt queattr('checked', false)
Daniel X Moore

4
@DanielXMoore, vous contournez le problème. L'exemple consistait à montrer qu'une fois que l'utilisateur avait cliqué sur la case à cocher, le navigateur ne répond plus aux checkedmodifications d'attribut, quelle que soit la méthode utilisée pour les modifier.
cwharris

3
@ChristopherHarris Ok, tu as raison, ça m'a manqué. À partir de jQuery 1.6, ne devriez-vous pas utiliser la méthode .prop? $('.myCheckBox').prop('checked', true)De cette façon, il s'appliquera automatiquement à l'ensemble complet des éléments appariés (uniquement lors de la définition, l'obtention n'est toujours que le premier)
Daniel X Moore

Oui. propest certainement la manière appropriée de définir des attributs sur un élément.
cwharris

@ChristopherHarris, j'ai ajouté ce dont j'avais besoin au plugin pour permettre une certaine flexibilité des paramètres. Cela a facilité le traitement en ligne sans conversion de type. Esp de bases de données disparates avec des "idées" sur ce qu'est "vrai". Violon: jsfiddle.net/Cyberjetx/vcp96
Joe Johnston

147

Tu peux faire

$('.myCheckbox').attr('checked',true) //Standards compliant

ou

$("form #mycheckbox").attr('checked', true)

Si vous avez du code personnalisé dans l'événement onclick pour la case à cocher que vous souhaitez déclencher, utilisez celui-ci à la place:

$("#mycheckbox").click();

Vous pouvez décocher en supprimant entièrement l'attribut:

$('.myCheckbox').removeAttr('checked')

Vous pouvez cocher toutes les cases comme ceci:

$(".myCheckbox").each(function(){
    $("#mycheckbox").click()
});

vous pouvez aussi aller $ ("# myTable input: checkbox"). each (...);
Chris Brandsma

Vous pouvez également aller$(".myCheckbox").click()
RobertPitt

3
@Michah en supprimant l'attribut vérifié, il est impossible de réinitialiser le formulaire
mcgrailm

12
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger

$("#mycheckbox").click();travaillé pour moi pendant que j'écoutais à l' événement de changement et aussi .attret .propn'a pas l' événement de changement incendie.
Damodar Bashyal

80

Vous pouvez également étendre l'objet $ .fn avec de nouvelles méthodes:

(function($)  {
   $.fn.extend({
      check : function()  {
         return this.filter(":radio, :checkbox").attr("checked", true);
      },
      uncheck : function()  {
         return this.filter(":radio, :checkbox").removeAttr("checked");
      }
   });
}(jQuery));

Ensuite, vous pouvez simplement faire:

$(":checkbox").check();
$(":checkbox").uncheck();

Ou vous voudrez peut-être leur donner des noms plus uniques comme mycheck () et myuncheck () dans le cas où vous utilisez une autre bibliothèque qui utilise ces noms.


5
@ livfree75 la suppression de l'attribut vérifié rend impossible la réinitialisation du formulaire
mcgrailm

5
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger

64
$("#mycheckbox")[0].checked = true;
$("#mycheckbox").attr('checked', true);
$("#mycheckbox").click();

Le dernier déclenchera l'événement de clic pour la case à cocher, les autres ne le feront pas. Donc, si vous avez du code personnalisé dans l'événement onclick pour la case à cocher que vous souhaitez déclencher, utilisez la dernière.


4
celui du haut échouera ... coché n'est pas un membre d'objet jquery
redsquare

5
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger

L'OMI l' clickévénement n'est pas fiable dans Firefox et Edge.
Vahid Amiri

62

Pour cocher une case, vous devez utiliser

 $('.myCheckbox').attr('checked',true);

ou

 $('.myCheckbox').attr('checked','checked');

et pour décocher une case, vous devez toujours la définir sur false:

 $('.myCheckbox').attr('checked',false);

Si tu fais

  $('.myCheckbox').removeAttr('checked')

il supprime l'attribut tous ensemble et vous ne pourrez donc pas réinitialiser le formulaire.

BAD DEMO jQuery 1.6 . Je pense que c'est cassé. Pour 1.6, je vais faire un nouveau post à ce sujet.

NOUVELLE DÉMO DE TRAVAIL jQuery 1.5.2 fonctionne dans Chrome.

Les deux démos utilisent

$('#tc').click(function() {
    if ( $('#myCheckbox').attr('checked')) {
        $('#myCheckbox').attr('checked', false);
    } else {
        $('#myCheckbox').attr('checked', 'checked');
    }
});

1
C'est inexact. définir l'attribut «vérifié» sur «» ne désélectionnera pas les cases à cocher dans au moins chrome.
cwharris

@xixonia J'ai testé avant de poster votre violon ne fonctionne pas car vous n'avez pas modifié le menu de gauche pour inclure jquery
mcgrailm

1
mcgralim - en 1.6 c'est encore plus facile .... $(".mycheckbox").prop("checked", true/false)
gnarf

2
@MarkAmery, vous avez mentionné que mon message n'a rien ajouté au moment de la publication, mais c'est exact. Si vous regardez l'historique de la réponse acceptée, vous constaterez qu'ils suggèrent de supprimer l'élément. Ce qui rend impossible la réinitialisation du formulaire, c'est pourquoi j'ai commencé par poster.
mcgrailm

1
@mcgrailm Je suis allé de l'avant et j'ai modifié la réponse acceptée à la lumière de vos remarques. Si vous souhaitez jeter un œil dessus et vérifier qu'il a l'air bien dans son état actuel, je l'apprécierais. Je m'excuse encore une fois d'avoir formulé de vives critiques qui étaient, au moins en partie, très peu judicieuses.
Mark Amery

51

Cela sélectionne les éléments qui ont l'attribut spécifié avec une valeur contenant la sous-chaîne donnée "ckbItem":

$('input[name *= ckbItem]').prop('checked', true);

Il sélectionnera tous les éléments qui contiennent ckbItem dans son attribut de nom.


46

En supposant que la question est ...

Comment puis-je vérifier un ensemble de cases à cocher PAR VALEUR?

N'oubliez pas que dans un ensemble de cases à cocher typique, toutes les balises d'entrée ont le même nom, elles diffèrent par l'attributvalue : il n'y a pas d'ID pour chaque entrée de l'ensemble.

La réponse de Xian peut être étendue avec un sélecteur plus spécifique , en utilisant la ligne de code suivante:

$("input.myclass[name='myname'][value='the_value']").prop("checked", true);

45

Je manque la solution. J'utiliserai toujours:

if ($('#myCheckBox:checked').val() !== undefined)
{
    //Checked
}
else
{
    //Not checked
}

3
Cela ne répond pas à la question (la question consiste à définir si une case à cocher est cochée, pas à déterminer si une case à cocher est cochée). C'est aussi un moyen assez laid de déterminer si la case est cochée (d'une part, vous exploitez le fait non évident qui .val()reviendra toujours undefinedlorsqu'il est appelé sur 0 éléments pour détecter qu'un objet jQuery est vide, quand vous le pourriez il suffit de le vérifier à la .lengthplace) - voir stackoverflow.com/questions/901712/… pour des approches plus lisibles.
Mark Amery

42

Pour cocher une case à l'aide de jQuery 1.6 ou supérieur, procédez comme suit:

checkbox.prop('checked', true);

Pour décocher, utilisez:

checkbox.prop('checked', false);

Voici ce que j'aime utiliser pour basculer une case à cocher à l'aide de jQuery:

checkbox.prop('checked', !checkbox.prop('checked'));

Si vous utilisez jQuery 1.5 ou inférieur:

checkbox.attr('checked', true);

Pour décocher, utilisez:

checkbox.attr('checked', false);

37

Voici un moyen de le faire sans jQuery

function addOrAttachListener(el, type, listener, useCapture) {
  if (el.addEventListener) {
    el.addEventListener(type, listener, useCapture);
  } else if (el.attachEvent) {
    el.attachEvent("on" + type, listener);
  }
};

addOrAttachListener(window, "load", function() {
  var cbElem = document.getElementById("cb");
  var rcbElem = document.getElementById("rcb");
  addOrAttachListener(cbElem, "click", function() {
    rcbElem.checked = cbElem.checked;
  }, false);
}, false);
<label>Click Me!
  <input id="cb" type="checkbox" />
</label>
<label>Reflection:
  <input id="rcb" type="checkbox" />
</label>


31

Voici le code pour coché et décoché avec un bouton:

var set=1;
var unset=0;
jQuery( function() {
    $( '.checkAll' ).live('click', function() {
        $( '.cb-element' ).each(function () {
            if(set==1){ $( '.cb-element' ).attr('checked', true) unset=0; }
            if(set==0){ $( '.cb-element' ).attr('checked', false); unset=1; }
        });
        set=unset;
    });
});

Mise à jour: Voici le même bloc de code utilisant la nouvelle méthode prop Jquery 1.6+, qui remplace attr:

var set=1;
var unset=0;
jQuery( function() {
    $( '.checkAll' ).live('click', function() {
        $( '.cb-element' ).each(function () {
            if(set==1){ $( '.cb-element' ).prop('checked', true) unset=0; }
            if(set==0){ $( '.cb-element' ).prop('checked', false); unset=1; }
        });
        set=unset;
    });
});

4
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger

30

Essaye ça:

$('#checkboxid').get(0).checked = true;  //For checking

$('#checkboxid').get(0).checked = false; //For unchecking

29

Nous pouvons utiliser elementObjectavec jQuery pour obtenir l'attribut vérifié:

$(objectElement).attr('checked');

Nous pouvons l'utiliser pour toutes les versions de jQuery sans aucune erreur.

Mise à jour: Jquery 1.6+ a la nouvelle méthode prop qui remplace attr, par exemple:

$(objectElement).prop('checked');

2
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger

25

Si vous utilisez PhoneGap pour le développement d'applications et que vous avez une valeur sur le bouton que vous souhaitez afficher instantanément, n'oubliez pas de le faire

$('span.ui-[controlname]',$('[id]')).text("the value");

J'ai trouvé que sans la durée, l'interface ne sera pas mise à jour, quoi que vous fassiez.


25

Voici le code et la démo pour savoir comment cocher plusieurs cases à cocher ...

http://jsfiddle.net/tamilmani/z8TTt/

$("#check").on("click", function () {

    var chk = document.getElementById('check').checked;
    var arr = document.getElementsByTagName("input");

    if (chk) {
        for (var i in arr) {
            if (arr[i].name == 'check') arr[i].checked = true;
        }
    } else {
        for (var i in arr) {
            if (arr[i].name == 'check') arr[i].checked = false;
        }
    }
});

- 1; mélanger les sélecteurs jQuery comme $("#check")avec les appels bruts de l'API DOM comme document.getElementsByTagName("input")me semble inélégant, d'autant plus que les forboucles ici pourraient être évitées en utilisant .prop(). Quoi qu'il en soit, c'est encore une autre réponse tardive qui n'ajoute rien de nouveau.
Mark Amery

20

Une autre solution possible:

    var c = $("#checkboxid");
    if (c.is(":checked")) {
         $('#checkboxid').prop('checked', false);
    } else {
         $('#checkboxid').prop('checked', true);
    }

19

Comme l'a dit @ livefree75:

jQuery 1.5.x et inférieur

Vous pouvez également étendre l'objet $ .fn avec de nouvelles méthodes:

(function($)  {
   $.fn.extend({
      check : function()  {
         return this.filter(":radio, :checkbox").attr("checked", true);
      },
      uncheck : function()  {
         return this.filter(":radio, :checkbox").removeAttr("checked");
      }
   });
}(jQuery));

Mais dans les nouvelles versions de jQuery, nous devons utiliser quelque chose comme ceci:

jQuery 1.6+

    (function($)  {
       $.fn.extend({
          check : function()  {
             return this.filter(":radio, :checkbox").prop("checked", true);
          },
          uncheck : function()  {
             return this.filter(":radio, :checkbox").prop("checked",false);
          }
       });
    }(jQuery));

Ensuite, vous pouvez simplement faire:

    $(":checkbox").check();
    $(":checkbox").uncheck();

18

Si vous utilisez mobile et que vous souhaitez que l'interface se mette à jour et affiche la case à cocher comme décochée, utilisez ce qui suit:

$("#checkbox1").prop('checked', false).checkboxradio("refresh");

18

Soyez conscient des fuites de mémoire dans Internet Explorer avant Internet Explorer 9 , comme l' indique la documentation jQuery :

Dans Internet Explorer antérieur à la version 9, l'utilisation de .prop () pour définir une propriété d'élément DOM sur autre chose qu'une simple valeur primitive (nombre, chaîne ou booléen) peut provoquer des fuites de mémoire si la propriété n'est pas supprimée (à l'aide de .removeProp ( )) avant que l'élément DOM ne soit supprimé du document. Pour définir en toute sécurité des valeurs sur des objets DOM sans fuite de mémoire, utilisez .data ().


2
Ce n'est pas pertinent, car toutes les réponses (correctes) utilisent .prop('checked',true).
Blazemonger

Je ne suis pas sûr d'avoir compris votre commentaire, il existe toujours dans la documentation jQuery. Voulez-vous dire qu'il n'y a pas de fuite de mémoire dans IE <9?
naor

2
Il n'y a pas de fuite de mémoire dans ce cas, puisque nous sommes le mettre à une valeur simple primitive (Boolean).
Blazemonger

18

Pour jQuery 1.6+

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

Pour jQuery 1.5.x et inférieur

$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);

Vérifier,

$('.myCheckbox').removeAttr('checked');

17

Pour cocher et décocher

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

3
- 1; cela n'ajoute aucune valeur à un fil déjà gonflé. Le code ici est exactement le même que la réponse acceptée.
Mark Amery

16
$('controlCheckBox').click(function(){
    var temp = $(this).prop('checked');
    $('controlledCheckBoxes').prop('checked', temp);
});

4
- 1 pour être une réponse uniquement codée, ne répondant pas directement à la question et n'ajoutant rien que les autres réponses n'avaient pas déjà couvert.
Mark Amery

15

C'est probablement la solution la plus courte et la plus simple:

$(".myCheckBox")[0].checked = true;

ou

$(".myCheckBox")[0].checked = false;

Encore plus court serait:

$(".myCheckBox")[0].checked = !0;
$(".myCheckBox")[0].checked = !1;

Voici également un jsFiddle .


14

Le JavaScript simple est très simple et beaucoup moins de frais généraux:

var elements = document.getElementsByClassName('myCheckBox');
for(var i = 0; i < elements.length; i++)
{
    elements[i].checked = true;
}

Exemple ici


@MarkAmery La réponse acceptée ne couvre pas comment le faire sans jQuery. Ma réponse ajoute un avantage supplémentaire à la réponse acceptée.
Alex W

13

Je n'ai pas pu le faire fonctionner en utilisant:

$("#cb").prop('checked', 'true');
$("#cb").prop('checked', 'false');

Vrai et faux cocheraient la case. Ce qui a fonctionné pour moi, c'est:

$("#cb").prop('checked', 'true'); // For checking
$("#cb").prop('checked', '');     // For unchecking

16
cela ne devrait-il pas être trueet falseet non 'true'et 'false'?
tpower

9
Cela "n'a pas fonctionné" car a 'false'été converti en valeur booléenne, ce qui a entraîné une truechaîne vide qui a falsedonc "fonctionné". Voir ce violon par exemple de ce que je veux dire.
Shadow Wizard est Ear For You

@ chris97ong J'ai annulé votre modification; quand quelqu'un dit "N'utilisez pas le code ci-dessous parce qu'il ne fonctionne pas", corriger ce code tout en laissant le commentaire disant qu'il ne fonctionne pas est dangereux - surtout quand il casse l'explication dans les commentaires de la raison pour laquelle le code n'est pas ne fonctionne pas. Cela dit, cette réponse est encore quelque peu confuse et mérite un downvote pour les raisons données par tpower et ShadowWizard.
Mark Amery

1
utilisez des valeurs vraies et fausses pour les booléens, n'utilisez pas «vrai» ou «faux» (chaînes).
Jone Polvora

13

Lorsque vous avez coché une case comme;

$('.className').attr('checked', 'checked')

cela pourrait ne pas suffire. Vous devez également appeler la fonction ci-dessous;

$('.className').prop('checked', 'true')

Surtout lorsque vous avez supprimé l'attribut checkbox.


11

Voici la réponse complète en utilisant jQuery

Je le teste et ça marche à 100%: D

    // when the button (select_unit_button) is clicked it returns all the checed checkboxes values 
    $("#select_unit_button").on("click", function(e){

             var arr = [];

             $(':checkbox:checked').each(function(i){
                 arr[i] = $(this).val(); // u can get id or anything else
             });

              //console.log(arr); // u can test it using this in google chrome
    });

10

Dans jQuery,

if($("#checkboxId").is(':checked')){
    alert("Checked");
}

ou

if($("#checkboxId").attr('checked')==true){
    alert("Checked");
}

En JavaScript,

if (document.getElementById("checkboxID").checked){
    alert("Checked");
}

7
Cela ne répond pas à la question.
Samuel Liew

2
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger
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.