Vérifier si la case est cochée avec jQuery


1189

Comment puis-je vérifier si une case à cocher dans un tableau de cases à cocher est cochée à l'aide de l'ID du tableau de cases à cocher?

J'utilise le code suivant, mais il renvoie toujours le nombre de cases à cocher indépendamment de l'id.

function isCheckedById(id) {
    alert(id);
    var checked = $("input[@id=" + id + "]:checked").length;
    alert(checked);

    if (checked == 0) {
        return false;
    } else {
        return true;
    }
}

Un tableau de cases à cocher ? Jamais entendu parler d'une telle chose. Est-ce quelque chose de spécifique à JQuery, ou un plugin / widget?
Pekka

2
un tableau de cases à cocher signifie quelque chose comme: <input type = "checkbox" name = "chk []" id = "chk []" value = "apple"> <input type = "checkbox" name = "chk []" id = "chk []" value = "banana"> <input type = "checkbox" name = "chk []" id = "chk []" value = "orange"> etc.
Jake

2
quel est le problème avec un tableau de cases à cocher? sinon, comment feriez-vous une entrée «cocher toutes les réponses qui s'appliquent»?
nickf

5
Assurez-vous que vos ids sont uniques! namepeut (et devrait, dans ce cas) se répéter, mais vous trouverez beaucoup de choses étranges si vous dupliquez le id! = D
Jeff Rupert

J'ai dû supprimer le "@" pour que cela fonctionne. De plus, vous pouvez réduire les 5 dernières lignes à 1: return (vérifié! = 0);
B. Clay Shannon

Réponses:


690

Les ID doivent être uniques dans votre document, ce qui signifie que vous ne devriez pas faire ceci:

<input type="checkbox" name="chk[]" id="chk[]" value="Apples" />
<input type="checkbox" name="chk[]" id="chk[]" value="Bananas" />

Au lieu de cela, supprimez l'ID, puis sélectionnez-les par nom ou par un élément conteneur:

<fieldset id="checkArray">
    <input type="checkbox" name="chk[]" value="Apples" />

    <input type="checkbox" name="chk[]" value="Bananas" />
</fieldset>

Et maintenant le jQuery:

var atLeastOneIsChecked = $('#checkArray:checkbox:checked').length > 0;
//there should be no space between identifier and selector

// or, without the container:

var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;

Pour moi, j'ai travaillé sans guillemets sur le nom de l'entrée: entrée [nom = contrôle multiple []]: vérifié, merci!
Alejandro Quiroz

30
Pourquoi utiliser $('#checkArray :checkbox:checked').length > 0;quand le plus simple $('#checkArray').checkedfonctionne et est disponible sur plusieurs versions?
Don Cheadle

5
@Oddman cela fonctionne, mais pas sur un objet jquery. au lieu de $ (elem) .checked, essayez elem.checked.
Dan Williams

1
@DanWilliams oui mais pas dans l'exemple donné par mmcrae.
Oddman

Le second a fonctionné pour moi. Merci!! var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;
David Silva-Barrera

2027
$('#' + id).is(":checked")

Cela devient si la case est cochée.

Pour un tableau de cases à cocher portant le même nom, vous pouvez obtenir la liste des cases cochées en:

var $boxes = $('input[name=thename]:checked');

Ensuite, pour les parcourir et voir ce qui est vérifié, vous pouvez le faire:

$boxes.each(function(){
    // Do stuff here with this
});

Pour savoir combien sont vérifiés, vous pouvez faire:

$boxes.length;

2
Une autre façon est $('#'+id).attr('checked'), qui est équivalente $('#' + id).is(":checked")mais plus facile à retenir IMO.
Zubin

85
@Zubin: Soyez prudent avec .attr('checked'). Son comportement a changé dans jQuery 1.6. Il retournait falseou true. Maintenant, il revient undefinedou "checked". .is(':checked')n'a pas ce problème.
Joey Adams

1
@John Boker: désolé pour le commentaire nécro mais, pourquoi est-ce que $('.ClassName').is(':checked')cela ne semble pas fonctionner mais $('#' + id).is(":checked")fonctionne? à part le fait que l'on cherche par id et un par nom de classe.
Mike_OBrien

@Mike_OBrien Le problème pourrait être qu'il y a plus d'une case à cocher avec ce nom de classe. L'is (': vérifié') ne fonctionne vraiment que sur un seul élément.
John Boker

5
Remarque: size () est obsolète depuis jQuery 1.8 - utilisez plutôt .length
JM4

312
$('#checkbox').is(':checked'); 

Le code ci-dessus renvoie vrai si la case est cochée ou faux sinon.


7
très utile lors de l'utilisation de $ (this) .is (': vérifié'); Merci!
PinoyStackOverflower

Cette méthode est utile pour vérifier si la case est cochée, où vous savez comment la sélectionner, merci
Omar Isaid

Cela a fonctionné pour moi, je l'ai utilisé avant var isChecked = $('#CheckboxID').attr('checked') ? true : false; mais ne retournais pas toujours la valeur correcte. Donc merci!
leiit

121

Toutes les méthodes suivantes sont utiles:

$('#checkbox').is(":checked")

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

$('#checkbox')[0].checked

$('#checkbox').get(0).checked

Il est recommandé d'éviter DOMelement ou inline "this.checked" à la place, jQuery on method doit être utilisé comme écouteur d'événements.


98

Code jQuery pour vérifier si la case est cochée ou non:

if($('input[name="checkBoxName"]').is(':checked'))
{
  // checked
}else
{
 // unchecked
}

Alternativement:

if($('input[name="checkBoxName"]:checked'))
{
    // checked
}else{
  // unchecked
}

4
La première solution est manquante :... CORRECTE est: if(('input[name="checkBoxName"]').is(':checked')).
Aerendir

Signe dollar manquant ($), ça devrait l'être if($('input[name="checkBoxName"]').is(':checked')).
Penny Liu

Le second elsen'exécutera jamais le bloc, car un objet jQuery, même s'il ne contient aucun élément correspondant, est "véridique". Ajoutez .lengthà la fin, puis vous parlez.
Heretic Monkey

69

Le concept le plus important à retenir à propos de l'attribut vérifié est qu'il ne correspond pas à la propriété vérifiée. L'attribut correspond en fait à la propriété defaultChecked et ne doit être utilisé que pour définir la valeur initiale de la case à cocher. La valeur d'attribut vérifiée ne change pas avec l'état de la case à cocher, contrairement à la propriété vérifiée. Par conséquent, la façon compatible avec tous les navigateurs de déterminer si une case à cocher est cochée consiste à utiliser la propriété

Toutes les méthodes ci-dessous sont possibles

elem.checked 

$(elem).prop("checked") 

$(elem).is(":checked") 

38

Vous pouvez utiliser ce code,

if($("#checkboxId").is(':checked')){
     // Code in the case checkbox is checked.
} else {
     // Code in the case checkbox is NOT checked.
}

29

Selon la documentation de jQuery , il existe des façons suivantes de vérifier si une case à cocher est cochée ou non. Considérons par exemple une case à cocher (Cochez Working jsfiddle avec tous les exemples)

<input type="checkbox" name="mycheckbox" id="mycheckbox" />
<br><br>
<input type="button" id="test-with-checked" value="Test with checked" />
<input type="button" id="test-with-is" value="Test with is" />
<input type="button" id="test-with-prop" value="Test with prop" />

Exemple 1 - Avec coché

$("#test-with-checked").on("click", function(){
    if(mycheckbox.checked) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Exemple 2 - Avec jQuery is, NOTE -: vérifié

var check;
$("#test-with-is").on("click", function(){
    check = $("#mycheckbox").is(":checked");
    if(check) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Exemple 3 - Avec jQuery prop

var check;
$("#test-with-prop").on("click", function(){
    check = $("#mycheckbox").prop("checked");
    if(check) {
         alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Vérifier le travail jsfiddle


26

Vous pouvez essayer ceci:

<script>
function checkAllCheckBox(value)
{
   if($('#select_all_').is(':checked')){
   $(".check_").attr ( "checked" ,"checked" );
    }
    else
    {
        $(".check_").removeAttr('checked');
    }

 }

</script>
<input type="checkbox" name="chkbox" id="select_all_" value="1" />


<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />
<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />

Ce n'est plus un bon moyen de faire les choses, car il attrne reflète que la valeur d'attribut en HTML, pas la valeur de propriété dans le DOM. Voir la documentation pourattr , où il est dit "Pour récupérer et modifier les propriétés DOM telles que les éléments checked, selectedou l' disabledétat des formulaires, utilisez la .prop()méthode.", Et la documentation pourprop , où il est dit "La .prop()méthode doit être utilisée pour définir disabledet à la checkedplace de la .attr()méthode. "
Heretic Monkey

21

Vous pouvez utiliser l'un des codes recommandés suivants par jquery.

if ( elem.checked ) {};
if ( $( elem ).prop( "checked" ) ) {};
if ( $( elem ).is( ":checked" ) ) {};

20

Je sais que l'OP veut jquery mais dans mon cas, JS pur était la réponse, donc si quelqu'un comme moi est ici et n'a pas jquery ou ne veut pas l'utiliser - voici la réponse JS:

document.getElementById("myCheck").checked

Elle renvoie vrai si l'entrée avec l'ID myCheck est vérifiée et false si elle n'est pas vérifiée.

Aussi simple que cela.


11
ce qui signifie que $("#myCheck")[0].checkedcela fonctionnera en jquery! : D
Sancarn

10

Vous pouvez le faire simplement comme;

Violon de travail

HTML

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

jQuery

$(document).ready(function () {
    var ckbox = $('#checkbox');

    $('input').on('click',function () {
        if (ckbox.is(':checked')) {
            alert('You have Checked it');
        } else {
            alert('You Un-Checked it');
        }
    });
});

ou encore plus simple;

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

Si le checkboxest coché il reviendra truesinonundefined


or even simpler;->$("#checkbox").checked
Don Cheadle

10

C'est aussi une idée que j'utilise fréquemment:

var active = $('#modal-check-visible').prop("checked") ? 1 : 0 ;

S'il est mâché, il renverra 1; sinon, il retournera 0.


7

Démo simple pour vérifier et définir une case à cocher.

jsfiddle !

$('.attr-value-name').click(function() {
    if($(this).parent().find('input[type="checkbox"]').is(':checked'))
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', false);
    }
    else
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', true);
    }
});

7

Juste pour dire que dans mon exemple, la situation était une boîte de dialogue qui a ensuite vérifié la case à cocher avant de fermer la boîte de dialogue. Aucune des réponses ci-dessus et Comment vérifier si une case à cocher est cochée dans jQuery? et jQuery si la case est cochée ne semble pas fonctionner non plus.

À la fin

<input class="cb" id="rd" type="checkbox">
<input class="cb" id="fd" type="checkbox">

var fd=$('.cb#fd').is(':checked');
var rd= $('.cb#rd').is(':checked');

Cela a fonctionné donc appeler la classe puis l'ID. plutôt que juste l'ID. Cela peut être dû aux éléments DOM imbriqués sur cette page à l'origine du problème. La solution de contournement était ci-dessus.


6

Pour case à cocher avec un identifiant

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

vous pouvez simplement faire

$("#id_input_checkbox13").prop('checked')

vous obtiendrez trueou falsecomme valeur de retour pour la syntaxe ci-dessus. Vous pouvez l'utiliser dans la clause if comme expression booléenne normale.


5

Quelque chose comme ça peut aider

togglecheckBoxs =  function( objCheckBox ) {

    var boolAllChecked = true;

    if( false == objCheckBox.checked ) {
        $('#checkAll').prop( 'checked',false );
    } else {
        $( 'input[id^="someIds_"]' ).each( function( chkboxIndex, chkbox ) {
            if( false == chkbox.checked ) {
                $('#checkAll').prop( 'checked',false );
                boolAllChecked = false;
            }
        });

        if( true == boolAllChecked ) {
            $('#checkAll').prop( 'checked',true );
        }
    }
}

5

En fait, selon jsperf.com , les opérations DOM sont les plus rapides, puis $ (). Prop () suivi de $ (). Is () !!

Voici les syntaxes:

var checkbox = $('#'+id);
/* OR var checkbox = $("input[name=checkbox1]"); whichever is best */

/* The DOM way - The fastest */
if(checkbox[0].checked == true)
   alert('Checkbox is checked!!');

/* Using jQuery .prop() - The second fastest */
if(checkbox.prop('checked') == true)
   alert('Checkbox is checked!!');

/* Using jQuery .is() - The slowest in the lot */
if(checkbox.is(':checked') == true)
   alert('Checkbox is checked!!');

Personnellement, je préfère .prop(). Contrairement à .is(), il peut également être utilisé pour définir la valeur.


4

Activer la case à cocher

$("#checkall").click(function(){
    $("input:checkbox").prop( 'checked',$(this).is(":checked") );
})

2

En utilisant ce code, vous pouvez vérifier qu'au moins une case à cocher est sélectionnée ou non dans différents groupes de cases à cocher ou à partir de plusieurs cases à cocher. En utilisant cela, vous ne pouvez pas exiger de supprimer les ID ou les ID dynamiques. Ce code fonctionne avec les mêmes ID.

Lien de référence

<label class="control-label col-sm-4">Check Box 2</label>
    <input type="checkbox" name="checkbox2" id="checkbox21" value=ck1 /> ck1<br />
    <input type="checkbox" name="checkbox2" id="checkbox22" value=ck2 /> ck2<br />

<label class="control-label col-sm-4">Check Box 3</label>
    <input type="checkbox" name="checkbox3" id="checkbox31" value=ck3 /> ck3<br />
    <input type="checkbox" name="checkbox3" id="checkbox32" value=ck4 /> ck4<br />

<script>
function checkFormData() {
    if (!$('input[name=checkbox2]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 2 can not be null";
        return false;
    }
    if (!$('input[name=checkbox3]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 3 can not be null";
        return false;
    }
    alert("Success");
    return true;
}
</script>

Informations de base: les identifiants des éléments html ne se répètent pas (par exemple: id = "checkbox2", id = "checkbox3"). Ce n'est pas une bonne pratique. Nous pouvons utiliser la classe plusieurs fois dans une page.
Anand Somasekhar

1

Depuis la mi-2019 et jQuery prend parfois un siège arrière à des choses comme VueJS, React etc. Voici une option d'écoute de chargement Javascript pure vanille:

<script>
  // Replace 'admincheckbox' both variable and ID with whatever suits.

  window.onload = function() {
    const admincheckbox = document.getElementById("admincheckbox");
    admincheckbox.addEventListener('click', function() {
      if(admincheckbox.checked){
        alert('Checked');
      } else {
        alert('Unchecked');
      }
    });
  }
</script>

0

Votre question n'est pas claire: vous voulez donner "ID de tableau de case à cocher" à l'entrée et obtenir true/falseà la sortie - de cette façon, vous ne saurez pas quelle case a été cochée (comme le suggère le nom de votre fonction). Donc, ci-dessous, il y a ma proposition de corps isCheckedByIdqui, à l'entrée, prend la case à cocher idet au retour de sortie true/false(c'est très simple mais votre ID ne doit pas être un mot-clé),

this[id].checked


-7

utilisez le code ci-dessous

<script>

$(document).ready(function () {
  $("[id$='chkSendMail']").attr("onchange", "ShowMailSection()");
}

function ShowMailSection() {
  if ($("[id$='chkSendMail'][type='checkbox']:checked").length >0){
      $("[id$='SecEmail']").removeClass("Hide");
  }
</script>

Vraiment? Que diriez-vous$(function() { $("[id$='chkSendMail']").on("change", ShowMailSection); });
mplungjan

Et ce sont toutes des cases à cocher, donc cela $("[id$='chkSendMail']:checked]")devrait fonctionner très bien
mplungjan
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.