277 votes

Comment mettre en œuvre la case à cocher "Tout sélectionner" en HTML ?

J'ai une page HTML avec plusieurs cases à cocher.

J'ai besoin d'une autre case à cocher du nom de "select all". Lorsque je sélectionne cette case à cocher, toutes les cases à cocher de la page HTML doivent être sélectionnées. Comment puis-je faire cela ?

1 votes

Si l'on veut que la dégradation se fasse en douceur, le fait de sélectionner "select all" devrait en fait signifier que tous sont sélectionnés, quel que soit leur état individuel. (visite de votre page avec javascript désactivé)

0 votes

Dans Firefox (et peut-être d'autres ?) : Hit CTRL+SHIFT+K pour ouvrir la console, puis pâte : $("input:checkbox").attr('checked', true) et frappez Enter . Toutes les cases à cocher de la page actuelle devraient maintenant être cochées. Pour décocher changement True a False .

379voto

Can Berk Güder Points 39887
<script language="JavaScript">
function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var checkbox in checkboxes)
    checkbox.checked = source.checked;
}
</script>

<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>

<input type="checkbox" name="foo" value="bar1"> Bar 1<br/>
<input type="checkbox" name="foo" value="bar2"> Bar 2<br/>
<input type="checkbox" name="foo" value="bar3"> Bar 3<br/>
<input type="checkbox" name="foo" value="bar4"> Bar 4<br/>

UPDATE :

El for each...in La construction ne semble pas fonctionner, du moins dans ce cas, dans Safari 5 ou Chrome 5. Ce code devrait fonctionner dans tous les navigateurs :

function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var i=0, n=checkboxes.length;i<n;i++) {
    checkboxes[i].checked = source.checked;
  }
}

1 votes

For each(var checkbox in checkboxes) --------------------------------------- devrait : for(var checkbox in checkboxes)

0 votes

@HelloWorld : for each...in est en fait du Javascript valide : developer.mozilla.org/fr/Core_JavaScript_1.5_Reference/ Mais, comme l'a souligné PorneL, c'est une construction obscure. De plus, ce code ne fonctionne pas dans Safari 5 ou Chrome 5. Il fonctionne dans FF 3.6, et IIRC, il fonctionnait dans Safari 4. for(var i in checkboxes) checkboxes[i].checked = source.checked fonctionne dans tous les navigateurs.

0 votes

Si vous adoptez cette méthode pour jquery, n'oubliez pas que la variable source devient une classe EventHandler, pour les événements de clic, et que vous devez donc spécifier l'objet cible pour que la commande vérifiée fonctionne. Voir ma réponse ci-dessous.

161voto

davydepauw Points 506

Utilisation de jQuery :

// Listen for click on toggle checkbox
$('#select-all').click(function(event) {   
    if(this.checked) {
        // Iterate each checkbox
        $(':checkbox').each(function() {
            this.checked = true;                        
        });
    } else {
        $(':checkbox').each(function() {
            this.checked = false;                       
        });
    }
}); 

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" name="checkbox-1" id="checkbox-1" />
<input type="checkbox" name="checkbox-2" id="checkbox-2" />
<input type="checkbox" name="checkbox-3" id="checkbox-3" />

<!-- select all boxes -->
<input type="checkbox" name="select-all" id="select-all" />

26 votes

J'ajouterais une clause else pour gérer le cas d'utilisation de deselect, ;-) .. else { // Interroger chaque case à cocher $(":checkbox").each(function() { this.checked = false ; }) ; } ; }

4 votes

Si vous voulez laisser de côté les éléments if et else et continuer à gérer la désélection, vous pouvez procéder de la manière suivante : var state = this.checked ; $(':checkbox').each(function() { this.checked = state ; }) ;

0 votes

Vous pouvez simplifier cela en disant $(':checkbox').prop('checked', true); y $(':checkbox').prop('checked', false);

97voto

fiatjaf Points 954

Je ne suis pas sûr que quelqu'un n'ait pas répondu de cette manière (à l'aide de jQuery ) :

  $( '#container .toggle-button' ).click( function () {
    $( '#container input[type="checkbox"]' ).prop('checked', this.checked)
  })

Il est propre, ne comporte pas de boucles ni de clauses if/else et fonctionne à merveille.

0 votes

Légèrement modifié pour : $('#container').on('click', 'toggle-button', function () {...}) est plus performant parce que jQuery ne doit écouter que les événements de clics provenant de l'intérieur de l'entreprise. #container plutôt que le DOM entier. Pour en savoir plus, consultez la documentation : api.jquery.com/on

67voto

Var Points 191

Voici une autre façon de moins coder

$(function () {
       $('#select-all').click(function (event) {

           var selected = this.checked;
           // Iterate each checkbox
           $(':checkbox').each(function () {    this.checked = selected; });

       });
    });

16voto

merakli Points 75

Démo http://jsfiddle.net/H37cb/

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js" /></script>

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

$('input[name="all"],input[name="title"]').bind('click', function(){
var status = $(this).is(':checked');
$('input[type="checkbox"]', $(this).parent('li')).attr('checked', status);
});

});
</script>

<div id="wrapper">
 <li style="margin-top: 20px">
  <input type="checkbox" name="all" id="all" /> <label for='all'>All</label>
  <ul>
   <li><input type="checkbox" name="title" id="title_1" /> <label for="title_1"><strong>Title 01</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_1" value="1" /> <label for="box_1">Sub Title 01</label></li>
     <li><input type="checkbox" name="selected[]" id="box_2" value="2" /> <label for="box_2">Sub Title 02</label></li>
     <li><input type="checkbox" name="selected[]" id="box_3" value="3" /> <label for="box_3">Sub Title 03</label></li>
     <li><input type="checkbox" name="selected[]" id="box_4" value="4" /> <label for="box_4">Sub Title 04</label></li>
    </ul>
   </li>
  </ul>
  <ul>
   <li><input type="checkbox" name="title" id="title_2" /> <label for="title_2"><strong>Title 02</strong></label>
    <ul>
     <li><input type="checkbox" name="selected[]" id="box_5" value="5" /> <label for="box_5">Sub Title 05</label></li>
     <li><input type="checkbox" name="selected[]" id="box_6" value="6" /> <label for="box_6">Sub Title 06</label></li>
     <li><input type="checkbox" name="selected[]" id="box_7" value="7" /> <label for="box_7">Sub Title 07</label></li>
    </ul>
   </li>
  </ul>
 </li>
</div>

1 votes

Pour moi, il ne fonctionne que pour un seul cycle, il bascule une seule fois puis ne fait rien.

0 votes

Donc c'est le attr() Je l'ai changé en prop()

0 votes

Si je désélectionne un élément de la liste, la case à cocher Sélectionner tout ne devrait-elle pas être désélectionnée également ?

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