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é?

Prasad
la source
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>

karim79
la source
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
Bhanu Krishnan
la source
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
}
SeanDowney
la source
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 .

ungalcrys
la source
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".

Pradeep
la source
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

Lalji Dhameliya
la source
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")
Salman A
la source
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

Prasad
la source
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.

Rajesh Omanakuttan
la source
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();
});
arviman
la source
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.

UDB
la source
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.

Octavian A. Damiean
la source
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();
}
xénon
la source
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.

Nertim
la source
46

Il existe plusieurs façons de vérifier si une case est cochée ou non:

Façon de vérifier en utilisant jQuery

if (elem.checked)
if ($(elem).prop("checked"))
if ($(elem).is(":checked"))
if ($(elem).attr('checked'))

Vérifiez l'exemple ou documentez également:

Parth Chavda
la source
46

Ce code vous aidera

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

Cela fonctionne pour moi:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});
ashish amatya
la source
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>

Sangeet Shah
la source
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.

Hamid NK
la source
33

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

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}
Dalius I
la source
31
$(selector).attr('checked') !== undefined

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

fe_lix_
la source
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();
        }
    });
});
Jumper Pot
la source
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.

Muhammad Awais
la source
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"
Somnath Kharat
la source
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);
    }
});
});
usayee
la source
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.

BigHomie
la source
22

J'utilise ceci:

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

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
Nishant
la source
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 .

Ormoz
la source
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');
    };
});
utilisateur2385302
la source
19

Je pense que ce sera simple

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Jitendra Damor
la source