Comment vérifier si une case à cocher est cochée dans jQuery?


4551

Je dois vérifier la checkedpropriété d'une case à cocher et effectuer une action basée sur la propriété vérifiée à l'aide de jQuery.

Par exemple, si la case à cocher Âge est cochée, je dois afficher une zone de texte pour entrer l'âge, sinon masquer la zone de texte.

Mais le code suivant retourne falsepar défaut:

if ($('#isAgeSelected').attr('checked'))
{
    $("#txtAge").show();
}
else
{
    $("#txtAge").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" id="isAgeSelected"/>

<div id="txtAge" style="display:none">
Age is selected
</div>

Comment interroger avec succès la checkedpropriété?


14
$ ('# isAgeSelected') renvoie la collection, remplacez-la par: $ ('# isAgeSelected') [0] .checked
zamoldar

14
pourquoi pas$('#isAgeSelected').checked
Don Cheadle

1
Pour une réponse complète (et correcte), voir: stackoverflow.com/questions/426258/…
Paul Kenjora

12
Étant donné que les sélecteurs jQuery renvoient un tableau, vous pouvez utiliser$('#isAgeSelected')[0].checked
Felipe Leão

2
pour moi, le réglage suivant a fonctionné: remplacer .attr ('vérifié') par .is (': vérifié')
Mark N Hopgood

Réponses:


3433

Comment interroger avec succès la propriété vérifiée?

La checkedpropriété d'un élément DOM de case à cocher vous donnera l' checkedétat de l'élément.

Compte tenu de votre code existant, vous pouvez donc faire ceci:

if(document.getElementById('isAgeSelected').checked) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Cependant, il existe une façon beaucoup plus jolie de le faire, en utilisant toggle:

$('#isAgeSelected').click(function() {
    $("#txtAge").toggle(this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


36
j'ai également essayé la condition ci-dessus, mais elle retourne uniquement false
Prasad

24
$ ("# txtAge"). toggle (this.checked); Fait exactement la même chose que $ ("# txtAge"). Toggle (). Donc, si pour une raison quelconque, l'état est vérifié et que le div suivant est caché (vous avez cliqué sur le bouton de retour dans votre navigateur) - cela ne fonctionnera pas comme prévu.
Maksim Vi.

23
@Chiramisu - Si vous aviez lu la réponse tout en bas, vous auriez remarqué que ma modification n'utilise pas l' is(':checked')entreprise.
karim79

8
à définir: $ ("# chkmyElement") [0] .checked = true; pour obtenir: if ($ ("# chkmyElement") [0] .checked)
JJ_Coder4Hire

28
Ce n'est pas une réponse à la question. this.checkedn'est pas jQuery, comme l'OP l'a demandé. En outre, cela ne fonctionne que lorsque l'utilisateur clique sur la case à cocher, qui ne fait pas partie de la question. La question est, encore une fois, How to check whether a checkbox is checked in jQuery?à tout moment avec ou sans cocher la case et dans jQuery.
Marc Compte

1847

Utilisez la fonction is () de jQuery :

if($("#isAgeSelected").is(':checked'))
    $("#txtAge").show();  // checked
else
    $("#txtAge").hide();  // unchecked

19
Si vous n'avez pas besoin de durée, d'assouplissement, etc., vous pouvez utiliser $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1, il existe différentes façons d'obtenir la propriété vérifiée. Certains sont répertoriés ici
user3199690

En fait @NickG jQuery ne un : sélecteur visible
HVDD

2
@hvdd je sais - j'ai dit "propriété", pas sélecteur.
NickG

@ NickG ... Je ne comprends pas ce que tu veux dire. jQuery n'a pas de .visible"propriété" ( propriété ? vous voulez dire méthode ?) car l'élément no HTML a une propriété visible . Ils ont une display propriété de style et c'est un peu plus complexe que l'activation / désactivation.
xDaizu

567

Utilisation de jQuery> 1.6

<input type="checkbox" value="1" name="checkMeOut" id="checkMeOut" checked="checked" />

// traditional attr
$('#checkMeOut').attr('checked'); // "checked"
// new property method
$('#checkMeOut').prop('checked'); // true

En utilisant la nouvelle méthode de propriété:

if($('#checkMeOut').prop('checked')) {
    // something when checked
} else {
    // something else when not
}

27
Je voudrais savoir pourquoi ce n'est pas la réponse ... si vous utilisez jquery, la .propméthode est le moyen conçu pour vérifier les accessoires. .. ... Si vous allez faire l' .is(":checked")approche, c'est bien, mais ce n'est pas la manière conçue de le faire en utilisant jquery. droite?
dsdsdsdsd

1
@dsdsdsdsd probablement parce qu'il a encore besoin d'une autre étape de compatibilité descendante (je fais face au même problème en ce moment).
user98085

18
.is(":checked")et .prop("checked")sont deux moyens valides d'obtenir le même résultat dans jQuery, .isfonctionneront dans toutes les versions, .propnécessite 1.6+
gnarf

Si vous utilisez .attr('checked')dans jQuery 1.11.3, vous obtenez indéfini, où si vous utilisez .prop('checked'), vous obtiendrez true / false. Je ne vois pas pourquoi ils l'ont changé pour fonctionner de cette façon lorsque les anciens navigateurs ne peuvent pas prendre en charge les versions ultérieures de jQuery introduites .prop()et donc nécessaires .attr(). La seule grâce qui sauve est que les anciens navigateurs (ie IE 8) ne peuvent rien supporter> jQuery 1.9. J'espère qu'ils ne l'ont pas fait (make .attr('checked')= undefined) dans cette version! Heureusement, il y en a toujours this.checked.
vapcguy

230

jQuery 1.6+

$('#isAgeSelected').prop('checked')

jQuery 1.5 et inférieur

$('#isAgeSelected').attr('checked')

Toute version de jQuery

// Assuming an event handler on a checkbox
if (this.checked)

Tout le mérite revient à Xian .


8
Techniquement, this.checkedutilise du Javascript simple. Mais j'adore cette réponse croisée en version jQuery!
vapcguy

170

J'utilise ceci et cela fonctionne très bien:

$("#checkkBoxId").attr("checked") ? alert("Checked") : alert("Unchecked");

Remarque: Si la case est cochée, elle renverra true sinon indéfini, il vaut donc mieux vérifier la valeur "TRUE".


6
Cela fonctionne car $ ("# checkkBoxId"). Attr ("vérifié") renvoie "vérifié" ou "" (chaîne vide). Et une chaîne vide est falsifiée, une chaîne non vide est véridique, voir les valeurs véridiques
Adrien Be

7
Par jquery 2.1.x, il retourne toujours vérifié s'il est vérifié par défaut ... Je ne sais pas si ce comportement est intentionnel, mais cela ne fonctionne sûrement pas (je suppose que c'est un bug) ... Le val () ne fonctionne pas non plus, il reste "allumé". Le prop () fonctionne correctement et le dom.checked fonctionne non plus.
inf3rno

1
Et le problème survient lorsque vous devez prendre en charge des navigateurs plus anciens avec .attr()! Si seulement ils venaient de laisser assez bien seuls ... J'ai trouvé une autre réponse ici, que vous pouvez simplement utiliser this.checkedpour une solution cross-jQuery, car il s'agit simplement de Javascript.
vapcguy

.attr ('vérifié') testera s'il est vérifié par défaut, oui. Parce qu'il vérifie l' attribut html , pas l'état actuel. La version précédente était un bogue (même s'il a été beaucoup exploité, je suppose).
Jay Irvine

149

Utilisation:

<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned

$("#planned_checked").change(function() {
    if($(this).prop('checked')) {
        alert("Checked Box Selected");
    } else {
        alert("Checked Box deselect");
    }
});

    $("#planned_checked").change(function() {
        if($(this).prop('checked')) {
            alert("Checked Box Selected");
        } else {
            alert("Checked Box deselect");
        }
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned


119

Depuis jQuery 1.6, le comportement de jQuery.attr()a changé et les utilisateurs sont encouragés à ne pas l'utiliser pour récupérer l'état vérifié d'un élément. Au lieu de cela, vous devez utiliser jQuery.prop():

$("#txtAge").toggle(
    $("#isAgeSelected").prop("checked") // For checked attribute it returns true/false;
                                        // Return value changes with checkbox state
);

Deux autres possibilités sont:

$("#txtAge").get(0).checked
$("#txtAge").is(":checked")

et $ ("# txtAge") [0] .checked
Yevgeniy Afanasyev

101

Cela a fonctionné pour moi:

$get("isAgeSelected ").checked == true

isAgeSelectedest l'id du contrôle.

De plus, la réponse de @ karim79 fonctionne très bien. Je ne suis pas sûr de ce que j'ai manqué au moment où je l'ai testé.

Remarque, cette réponse utilise Microsoft Ajax, pas jQuery


4
Dans tous les cas, dans tous les langages de programmation normaux, vous pouvez omettre== true
RedPixel

@RedPixel Sauf si vous avez affaire à des types nullables. :) (smiley pédant)
Kolob Canyon

88

Si vous utilisez une version mise à jour de jquery, vous devez rechercher une .propméthode pour résoudre votre problème:

$('#isAgeSelected').prop('checked')reviendra trues'il est coché et falses'il n'est pas coché . Je l'ai confirmé et je suis tombé sur ce problème plus tôt. $('#isAgeSelected').attr('checked')et $('#isAgeSelected').is('checked')revient undefinedce qui n'est pas une réponse digne de la situation. Faites comme indiqué ci-dessous.

if($('#isAgeSelected').prop('checked')) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

J'espère que ça aide:) - Merci.


pourquoi pas $('#isAgeSelected').checked?
Don Cheadle

1
pour utiliser .si vous avez besoin de deux points $ ('# isAgeSelected'). is (': vérifié')
Patrick

62

L'utilisation du Clickgestionnaire d'événements pour la propriété de case à cocher n'est pas fiable, car la checkedpropriété peut changer pendant l'exécution du gestionnaire d'événements lui-même!

Idéalement, vous voudriez mettre votre code dans un changegestionnaire d'événements tel qu'il est déclenché chaque fois que la valeur de la case à cocher est modifiée (indépendamment de la façon dont cela est fait).

$('#isAgeSelected').bind('change', function () {

   if ($(this).is(':checked'))
     $("#txtAge").show();
   else
     $("#txtAge").hide();
});

3
Depuis jQuery 1.7, la .on()méthode est la méthode préférée pour attacher des gestionnaires d'événements à un document.
naor

61

Utilisation:

<input type="checkbox" id="abc" value="UDB">UDB
<input type="checkbox" id="abc" value="Prasad">Prasad
$('input#abc').click(function(){
  if($(this).is(':checked'))
  {
    var checkedOne=$(this).val()
    alert(checkedOne);

    // Do some other action
  }
})

Cela peut être utile si vous souhaitez que l'action requise ne soit effectuée que lorsque vous cochez la case, pas au moment où vous supprimez la coche.


53

J'ai décidé de poster une réponse sur la façon de faire exactement la même chose sans jQuery. Tout simplement parce que je suis un rebelle.

var ageCheckbox = document.getElementById('isAgeSelected');
var ageInput = document.getElementById('txtAge');

// Just because of IE <333
ageCheckbox.onchange = function() {
    // Check if the checkbox is checked, and show/hide the text field.
    ageInput.hidden = this.checked ? false : true;
};

Vous obtenez d'abord les deux éléments par leur ID. Ensuite, vous affectez à l' onchangeévénement de la case à cocher une fonction qui vérifie si la case à cocher a été cochée et définit la hiddenpropriété du champ de texte d'âge de manière appropriée. Dans cet exemple, en utilisant l'opérateur ternaire.

Voici un violon pour le tester.

Addenda

Si la compatibilité entre les navigateurs est un problème, je propose de définir la displaypropriété CSS sur none et inline .

elem.style.display = this.checked ? 'inline' : 'none';

Plus lent mais compatible avec tous les navigateurs.


Bon, ce .hiddenn'est pas très cross-browser, même si j'aime bien cette solution :)
Florian Margaine

C'est en effet la meilleure façon de l'utiliser style. C'est dommage, car les .hiddenperformances sont bien meilleures .
Florian Margaine

Affectation à l'intérieur d'un opérateur conditionnel? Légal, oui. Pas ce que j'appellerais du bon style, cependant.
Jules

peut se simplifier en: ageInput.hidden =! this.checked; (Je déteste quand les gens utilisent des littéraux booléens inutilement ... si vous utilisez à la fois "vrai" et "faux" dans la même déclaration simple, il est probablement inutile de les utiliser non plus)
JoelFan

52

Je pense que vous pourriez faire ceci:

if ($('#isAgeSelected :checked').size() > 0)
{
    $("#txtAge").show(); 
} else { 
    $("#txtAge").hide();
}

alert ($ ('input [name = isAgeSelected]'). attr ('vérifié')); Le code ci-dessus montre vrai / faux basé sur la vérification. Tout problème avec les essais précédents
Prasad

Prasad, faites-vous référence à votre case à cocher par nom ou par ID? Je suis confus maintenant ...
karim79

Tu ne peux pas lui donner une pièce d'identité? Les choses seraient beaucoup plus faciles, dans votre exemple, vous l'avez adressé par son ID
xenon

La méthode .size () est obsolète à partir de jQuery 1.8. Utilisez plutôt la propriété .length (sans no () ;-)! Et peut-être que vous devez rester ensemble "#isAgeSelected: vérifié".
François Breton

47

J'ai rencontré exactement le même problème. J'ai une case à cocher ASP.NET

<asp:CheckBox ID="chkBox1" CssClass='cssChkBox1' runat="server" />

Dans le code jQuery, j'ai utilisé le sélecteur suivant pour vérifier si la case était cochée ou non, et cela semble fonctionner comme un charme.

if ($("'.cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Je suis sûr que vous pouvez également utiliser l'ID au lieu de la classe Css,

if ($("'#cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

J'espère que ceci vous aide.



46

Ce code vous aidera

$('#isAgeSelected').click(function(){
   console.log(this.checked);
   if(this.checked == true) {
        $("#txtAge").show();
    } else {
       $("#txtAge").hide();
   }
});

42

Cela fonctionne pour moi:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});

41

Voici une méthode différente pour faire la même chose:

$(document).ready(function (){

    $('#isAgeSelected').click(function() {
        // $("#txtAge").toggle(this.checked);

        // Using a pure CSS selector
        if ($(this.checked)) {
            alert('on check 1');
        };

        // Using jQuery's is() method
        if ($(this).is(':checked')) {
            alert('on checked 2');
        };

        //  // Using jQuery's filter() method
        if ($(this).filter(':checked')) {
            alert('on checked 3');
        };
    });
});
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


35

Utilisez ceci:

if ($('input[name="salary_in.Basic"]:checked').length > 0)

La longueur est supérieure à zéro si la case est cochée.


33

Ma façon de procéder est la suivante:

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}

31
$(selector).attr('checked') !== undefined

Cela retourne truesi l'entrée est vérifiée et falsesi ce n'est pas le cas.


4
Je comprends pourquoi cela peut fonctionner dans certains scénarios, bien qu'il présente le même problème .attr('checked')que le fait qu'il ne retourne pas toujours l'état correct. Selon la réponse de Salman A (et peut-être d'autres), c'est une option plus sûre à utiliser à la place. En outre, il est également possible de déclarer comme . .prop('checked')undefinedvar undefined = 'checked';
WynandB

.prop('checked')semble une meilleure réponse maintenant. Ce n'était pas aussi fiable au moment où il a été écrit. Je ne comprends pas et je ne pense pas que ce soit une bonne idée de redéclarer undefined.
fe_lix_

En guise de remarque, la vérification de l'indéfini est meilleure avectypeof (x) !== "undefined"
naor

Dans ce cas, je pense que c'est plus précis et plus facile à lire avec! ==. J'utiliserais le typeof (x) uniquement lors du test d'une variable qui peut ou non avoir été définie dans le passé.
fe_lix_

30
$(document).ready(function() {    
    $('#agecheckbox').click(function() {
        if($(this).is(":checked"))
        {
            $('#agetextbox').show();
        } else {
            $('#agetextbox').hide();
        }
    });
});

30

Vous pouvez utiliser:

  if(document.getElementById('isAgeSelected').checked)
    $("#txtAge").show();  
  else
    $("#txtAge").hide();

if($("#isAgeSelected").is(':checked'))
  $("#txtAge").show();  
else
  $("#txtAge").hide();

Les deux devraient fonctionner.


27

1) Si votre balisage HTML est:

<input type="checkbox"  />

attr utilisé:

$(element).attr("checked"); // Will give you undefined as initial value of checkbox is not set

Si l'hélice est utilisée:

$(element).prop("checked"); // Will give you false whether or not initial value is set

2) Si votre balisage HTML est:

 <input type="checkbox"  checked="checked" />// May be like this also  checked="true"

attr utilisé:

$(element).attr("checked") // Will return checked whether it is checked="true"

Prop utilisé:

$(element).prop("checked") // Will return true whether checked="checked"

Ceci est un vrai problème. Solution: ajoutez un événement de modification à l'entrée: <input type = "checkbox" onchange = "ChangeChkBox ()" /> puis utilisez cet événement pour modifier une variable JavaScript booléenne et utilisez la variable JavaScript au lieu d'interroger directement la case à cocher.
Graham Laight

24

Cet exemple concerne le bouton.

Essayez ce qui suit:

<input type="button" class="check" id="checkall" value="Check All" />  &nbsp; <input type="button" id="remove" value="Delete" /> <br/>

<input type="checkbox" class="cb-element"  value="1" /> Checkbox  1 <br/>
<input type="checkbox" class="cb-element"  value="2" /> Checkbox  2 <br/>
<input type="checkbox" class="cb-element"  value="3" /> Checkbox  3 <br/>


$('#remove').attr('disabled', 'disabled'); 

$(document).ready(function() {  

    $('.cb-element').click(function() {

        if($(this).prop('checked'))
        {
            $('#remove').attr('disabled', false);
        }
        else
        {
            $('#remove').attr('disabled', true);
        }
    });   

    $('.check:button').click(function()
{
    var checked = !$(this).data('checked');
    $('input:checkbox').prop('checked', checked);
    $(this).data('checked', checked);

    if(checked == true)
    {
        $(this).val('Uncheck All');
         $('#remove').attr('disabled', false);
    }

    else if(checked == false)
    {
        $(this).val('Check All');
        $('#remove').attr('disabled', true);
    }
});
});

24

La meilleure réponse ne l'a pas fait pour moi. Cela a cependant:

<script type="text/javascript">
    $(document).ready(function(){

        $("#li_13").click(function(){
            if($("#agree").attr('checked')){
                $("#saveForm").fadeIn();
            }
            else
            {
                $("#saveForm").fadeOut();
            }
        });
    });
</script>

Fondamentalement, lorsque l'élément # li_13 est cliqué, il vérifie si l'élément # d'accord (qui est la case à cocher) est vérifié en utilisant la .attr('checked')fonction. S'il l'est, alors fadeIn l'élément #saveForm, et sinon fadeOut, l'élément saveForm.


22

J'utilise ceci:

 <input type="checkbox" id="isAgeSelected" value="1" /> <br/>
 <input type="textbox" id="txtAge" />

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();

22

Bien que vous ayez proposé une solution JavaScript pour votre problème (affichant un textboxquand un checkboxest checked), ce problème pourrait être résolu simplement par css . Avec cette approche, votre formulaire fonctionne pour les utilisateurs qui ont désactivé JavaScript.

En supposant que vous disposez du code HTML suivant:

<label for="show_textbox">Show Textbox</label>
<input id="show_textbox" type="checkbox" />
<input type="text" />

Vous pouvez utiliser le CSS suivant pour obtenir la fonctionnalité souhaitée:

 #show_textbox:not(:checked) + input[type=text] {display:none;}

Pour d'autres scénarios, vous pouvez penser à des sélecteurs CSS appropriés.

Voici un violon pour démontrer cette approche .


21

Basculer: 0/1 ou autre

<input type="checkbox" id="nolunch" />
<input id="checklunch />"

    $('#nolunch').change(function () {
    if ($(this).is(':checked')) {
        $('#checklunch').val('1');
    };
    if ($(this).is(':checked') == false) {
        $('#checklunch').val('0');
    };
});

19

Je pense que ce sera simple

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
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.