2010-02-09 6 views
57

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

<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 sauf #select_all lorsque l'utilisateur clique dessus?
Toute aide sera appréciée.

Répondre

83

Un plus complet exemple qui devrait fonctionner dans votre cas:

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

Lorsque la case #select_all est cliqué, l'état de la case est cochée et toutes les cases de la forme actuelle sont réglées sur le même statut.

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

var checkboxes = $(this).closest('form').find(':checkbox').not($(this)); 
+1

Merci, Tatu! C'est ce dont j'ai besoin – Darmen

+14

Pour moi, cela ne fonctionnait que la première fois (cochez tout, décochez tout). Sur la deuxième case 'cocher toutes' aucune des autres cases à cocher n'a été cochée. J'ai utilisé 'checkboxes.prop ('checked', true);' et 'checkboxes.prop ('checked', false);' à la place, à partir de [cette réponse] (http://stackoverflow.com/a/15266603/1438809). Oups, juste réalisé que cela est mentionné dans les réponses plus bas sur la page ... – Felix

+3

[documentation jQuery] (https://api.jquery.com/checkbox-selector/) indique que $ ("[type = checkbox]") 'est plus rapide pour les navigateurs modernes (plus rapide que' $ (': checkbox') '). – Todd

13
$("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 code HTML et fourni un gestionnaire de clic pour la principale case

$(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

Méfiez-vous de ne pas cocher toutes les cases sur la page ... :) –

+0

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

+0

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

0
$('.checkall').change(function() { 
    var checkboxes = $(this).closest('table').find('td').find(':checkbox'); 
    if($(this).is(':checked')) { 
     checkboxes.attr('checked', 'checked'); 
    } else { 
     checkboxes.removeAttr('checked'); 
    } 
}); 
41

simple et propre

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

cela peut aussi faire comme ceci ... '$ (': checkbox'). Prop ('checked', this.checked);' –

+0

Subtle - place le statut vérifié des cases à cocher récupérées égal à celui de notre récemment modifié ' master 'checkbox - simple, élégant et étonnamment logique quand on y pense - Merci! –

3
$(function() { 
$('#select_all').click(function() { 
    var checkboxes = $(this).closest('form').find(':checkbox'); 
    if($(this).is(':checked')) { 
     checkboxes.attr('checked', 'checked'); 
    } else { 
     checkboxes.removeAttr('checked'); 
    } 
}); 
    }); 
3
$(document).ready(function(){ 
    $("#select_all").click(function(){ 
     var checked_status = this.checked; 
     $("input[name='select[]']").each(function(){ 
     this.checked = checked_status; 
     }); 
    }); 
    }); 
29

Top réponse ne fonctionnera pas dans Jquery 1.9+ à cause de la méthode attr(). Utilisez 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

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

+1

L'OP a modifié la réponse pour faire face aux changements "récents" :) –

0
$("#select_all").live("click", function(){ 
      $("input").prop("checked", $(this).prop("checked")); 
    } 
    }); 
+2

Ajouter une explication/commentaire –

0

$ ("# select_all") changement (function() {

$ ('entrée [type = "checkbox"]') prop (. "checked", $ (this) .prop ("checked"));

});

0

Je suis maintenant partial à ce style.

J'ai nommé votre formulaire et ajouté un 'onClick' à votre boîte select_all.

J'ai également exclu la case à cocher 'select_all' du sélecteur jquery pour empêcher l'explosion d'Internet lorsque quelqu'un clique dessus.

function toggleSelect(formname) { 
    // select the form with the name 'formname', 
    // then all the checkboxes named 'select[]' 
    // then 'click' them 
    $('form[name='+formname+'] :checkbox[name="select[]"]').click() 
} 

<form name="myform"> 
    <tr> 
     <td><input type="checkbox" id="select_all"  
        onClick="toggleSelect('myform')" /> 
     </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> 

0

Voici un plugin jQuery de base, j'ai écrit qui sélectionne toutes les cases à cocher sur la page, à l'exception de la case à cocher/élément qui doit être utilisé comme levier:

(function($) { 
    // Checkbox toggle function for selecting all checkboxes on the page 
    $.fn.toggleCheckboxes = function() { 
     // Get all checkbox elements 
     checkboxes = $(':checkbox').not(this); 

     // Check if the checkboxes are checked/unchecked and if so uncheck/check them 
     if(this.is(':checked')) { 
      checkboxes.prop('checked', true); 
     } else { 
      checkboxes.prop('checked', false); 
     } 
    } 
}(jQuery)); 

Puis appelez simplement la fonction sur votre case à cocher ou élément de bouton:

// Check all checkboxes 
$('.check-all').change(function() { 
    $(this).toggleCheckboxes(); 
}); 
3
jQuery(document).ready(function() { 
     jQuery('.select-all').on('change', function() { 
      if (jQuery(this).is(':checked')) { 
       jQuery('input.class-name').each(function() { 
        this.checked = true; 
       }); 
      } else { 
       jQuery('input.class-name').each(function() { 
        this.checked = false; 
       }); 
      } 
     }); 
    }); 
+0

Le code est génial, mais une explication de pourquoi tout ça aide est toujours le bienvenu. –

2

Ce code fonctionne très bien avec moi

<script type="text/javascript"> 
$(document).ready(function(){ 
$("#select_all").change(function(){ 
    $(".checkbox_class").prop("checked", $(this).prop("checked")); 
    }); 
}); 
</script> 

vous suffit d'ajouter la classe checkbox_class à tous case

facile et simple: D

0

Face au problème , aucune des réponses ci-dessus ne fonctionne pas. La raison était dans le plugin jQuery uniforme (travail avec theme metronic) .Je espère que la réponse sera utile :)

Travailler avec les jQuery Uniforme

$('#select-all').change(function() { 
    var $this = $(this); 
    var $checkboxes = $this.closest('form') 
     .find(':checkbox'); 

    $checkboxes.prop('checked', $this.is(':checked')) 
     .not($this) 
     .change(); 
}); 
0

une case à cocher pour gouverner les tous

Pour les personnes qui cherchent encore pour plugin pour contrôler les cases à cocher par un léger, a un support prêt à l'emploi pour UniformJS et iCheck et est décochée quand au moins l'une des cases contrôlées est décochée (et est vérifiée lorsque toutes les cases contrôlées sont bien sûr vérifiées) J'ai créé un jQuery checkAll plugin.

N'hésitez pas à vérifier les exemples sur documentation page.


Pour cet exemple de question tout ce que vous devez faire est:

$('#select_all').checkall({ 
    target: 'input[type="checkbox"][name="select"]' 
}); 

est-ce pas clair et simple?

Questions connexes