75 votes

Comment sélectionner toutes les cases à cocher avec jQuery ?

J'ai besoin d'aide avec les sélecteurs jQuery. Disons que j'ai un balisage comme indiqué ci-dessous :

<form>
  <table>
    <tr>
      <td><input type="checkbox" id="select_all" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
  </table>
</form>

Comment obtenir toutes les cases à cocher sauf #select_all lorsque l'utilisateur clique dessus ?

0 votes

Voici un lien vers le codepen avec ceci codepen.io/nickhq/pen/pZJVEr

115voto

Tatu Ulmanen Points 52098

Un exemple plus complet qui devrait fonctionner dans votre cas :

$('#select_all').change(function() {
  var checkboxes = $(this).closest('form').find(':checkbox');
  checkboxes.prop('checked', $(this).is(':checked'));
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <table>
    <tr>
      <td><input type="checkbox" id="select_all" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
  </table>
</form>

Lorsque le #select_all Lorsque l'on clique sur une case à cocher, le statut de la case est coché et toutes les cases à cocher du formulaire actuel ont le même statut.

Notez que vous n'avez pas besoin d'exclure l'élément #select_all de la sélection, car elle aura le même statut que toutes les autres. Si, pour une raison quelconque, vous devez exclure la case à cocher #select_all vous pouvez utiliser ceci :

$('#select_all').change(function() {
  var checkboxes = $(this).closest('form').find(':checkbox').not($(this));
  checkboxes.prop('checked', $(this).is(':checked'));
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <table>
    <tr>
      <td><input type="checkbox" id="select_all" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
  </table>
</form>

14 votes

Pour moi, cela n'a fonctionné que la première fois (c'est-à-dire, cocher tout, décocher tout). Lors du deuxième "tout cocher", aucune des autres cases à cocher n'était cochée. J'ai utilisé checkboxes.prop('checked', true); y checkboxes.prop('checked', false); à la place, de cette réponse . Oups, je viens de réaliser que cela est mentionné dans les réponses plus bas sur la page...

3 votes

Documentation sur jQuery déclare que $( "[type=checkbox]" ) est plus rapide pour les navigateurs modernes (plus rapide que $(':checkbox') ).

54voto

LOL Points 241

Simple et propre :

$('#select_all').click(function() {
  var c = this.checked;
  $(':checkbox').prop('checked', c);
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <table>
    <tr>
      <td><input type="checkbox" id="select_all" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
    <tr>
      <td><input type="checkbox" name="select[]" /></td>
    </tr>
  </table>
</form>

4 votes

Cela peut aussi se faire comme ceci... $(':checkbox').prop('checked', this.checked);

0 votes

Subtil - mettre l'état coché des cases à cocher récupérées égal à celui de notre case à cocher 'maître' récemment modifiée - simple, élégant et étonnamment logique quand on y pense - Merci !

30voto

stepler654 Points 184

La réponse ci-dessus ne fonctionnera pas dans Jquery 1.9+ à cause de la méthode attr(). Utilisez la méthode prop() à la place :

$(function() {
    $('#select_all').change(function(){
        var checkboxes = $(this).closest('form').find(':checkbox');
        if($(this).prop('checked')) {
          checkboxes.prop('checked', true);
        } else {
          checkboxes.prop('checked', false);
        }
    });
});

0 votes

Merci pour cela, j'ai utilisé votre implémentation avec JQuery 1.8.3 ;-)

1 votes

Le PO a modifié sa réponse pour tenir compte des changements "récents" :)

21voto

rahul Points 84185
$("form input[type='checkbox']").attr( "checked" , true );

ou vous pouvez utiliser le

:checkbox Selector

$("form input:checkbox").attr( "checked" , true );

J'ai réécrit votre HTML et fourni un gestionnaire de clic pour la case à cocher principale.

$(function(){
    $("#select_all").click( function() {
        $("#frm1 input[type='checkbox'].child").attr( "checked", $(this).attr("checked" ) );
    });
});

<form id="frm1">
    <table>
        <tr>
            <td>
                <input type="checkbox" id="select_all" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="select[]" class="child" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="select[]" class="child" />
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="select[]" class="child" />
            </td>
        </tr>
    </table>
</form>

0 votes

Faites juste attention à ne pas cocher toutes les cases de la page... :)

0 votes

En fait, la syntaxe correcte est .attr("checked", "checked") .

0 votes

+1 Merci rahul, mais j'avais besoin de trouver toutes les cases à cocher lorsque l'utilisateur clique sur la case #select_all.

3voto

Dragos Custura Points 21
 $(function() {  
$('#select_all').click(function() {
    var checkboxes = $(this).closest('form').find(':checkbox');
    if($(this).is(':checked')) {
        checkboxes.attr('checked', 'checked');
    } else {
        checkboxes.removeAttr('checked');
    }
});
    });

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