1368 votes

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

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

J'utilise le code suivant, mais il renvoie toujours le nombre de cases cochées, quel que soit l'identifiant.

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

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

3 votes

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

2 votes

Qu'est-ce qui ne va pas avec un tableau de cases à cocher ? comment faire autrement pour une entrée "cocher tout ce qui s'applique" ?

6 votes

Assurez-vous que votre id sont uniques ! name peut (et devrait, dans ce cas) être répétée, mais vous trouverez beaucoup de choses bizarres si vous dupliquez le fichier id ! =D

2259voto

John Boker Points 36308
$('#' + id).is(":checked")

Cela permet de savoir 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 par :

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

Puis de les parcourir en boucle et de voir ce qu'il y a de vérifié que vous pouvez faire :

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

Pour savoir combien sont cochés, vous pouvez faire :

$boxes.length;

2 votes

Un autre moyen est $('#'+id).attr('checked') ce qui est équivalent à $('#' + id).is(":checked") mais plus facile à retenir IMO.

88 votes

@Zubin : Soyez prudent avec .attr('checked') . Son comportement a changé dans jQuery 1.6. Il retournait auparavant false o true . Maintenant, il retourne undefined o "checked" . .is(':checked') n'a pas ce problème.

1 votes

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

769voto

nickf Points 185423

Les identifiants doivent être uniques dans votre document, ce qui signifie que vous devez ne devrait pas faites-le :

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

Au lieu de cela, laissez tomber l'ID, puis sélectionnez-les par leur nom ou par un élément qui les contient :

<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;

0 votes

Pour moi, cela a fonctionné sans les guillemets sur le nom de l'entrée : input[name=multiplecheck[]]:checked, merci !

43 votes

Pourquoi utiliser $('#checkArray :checkbox:checked').length > 0; alors que le plus simple $('#checkArray').checked fonctionne et est disponible sur plusieurs versions ?

5 votes

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

347voto

Prasanna Rotti Points 661
$('#checkbox').is(':checked'); 

Le code ci-dessus renvoie true si la case à cocher est cochée ou false si elle ne l'est pas.

8 votes

Très utile lorsque l'on utilise $(this).is(':checked') ; Merci !

0 votes

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

0 votes

Cela a fonctionné pour moi, j'ai utilisé ceci avant var isChecked = $('#CheckboxID').attr('checked') ? true : false; mais n'a pas toujours renvoyé la valeur correcte. Merci donc !

74voto

Dasun Points 10555

Le concept le plus important à retenir concernant l'attribut checked est le suivant qu'il ne correspond pas à la propriété checked. L'attribut correspond en réalité à la propriété defaultChecked et ne doit être utilisé uniquement pour définir la valeur initiale de la case à cocher. La valeur de l'attribut checked ne change pas avec l'état de la case à cocher, tandis que la valeur de l'attribut checked le fait. Par conséquent, la méthode compatible avec les navigateurs pour pour déterminer si une case à cocher est cochée est d'utiliser la propriété

Toutes les méthodes ci-dessous sont possibles

elem.checked 

$(elem).prop("checked") 

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

29voto

Vishnu Sharma Points 479

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" />

0 votes

Ce n'est plus une bonne façon de faire les choses, car attr ne reflète que la valeur de l'attribut en HTML, et non la valeur de la propriété dans le DOM. Voir la documentation pour attr où il est dit "Pour récupérer et modifier les propriétés du DOM telles que l'indice checked , selected o disabled des éléments de formulaire, utilisez l'option .prop() et la documentation pour prop où il est dit "Le .prop() doit être utilisée pour définir disabled y checked au lieu de la .attr() méthode."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X