web-dev-qa-db-fra.com

Activer / désactiver les cases à cocher

J'ai le suivant:

$(document).ready(function()
{
    $("#select-all-teammembers").click(function() {
        $("input[name=recipients\\[\\]]").attr('checked', true);
    });                 
});

J'aimerais que le id="select-all-teammembers" lorsque l'on clique dessus permute entre coché et non coché. Des idées? ce ne sont pas des dizaines de lignes de code?

381
AnApprentice

Tu peux écrire:

$(document).ready(function() {
    $("#select-all-teammembers").click(function() {
        var checkBoxes = $("input[name=recipients\\[\\]]");
        checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    });                 
});

Avant jQuery 1.6, quand nous n'avions que attr () et non prop () , nous écrivions:

checkBoxes.attr("checked", !checkBoxes.attr("checked"));

Mais prop() a une meilleure sémantique que attr() lorsqu'il est appliqué à des attributs HTML "booléens"; il est donc généralement préférable dans cette situation.

693
Frédéric Hamidi
//this toggles the checkbox, and fires its event if it has    

$('input[type=checkbox]').trigger('click'); 
//or
$('input[type=checkbox]').click(); 
201
user669677

Je sais que c'est vieux, mais la question était un peu ambiguë en ce que toggle peut signifier que chaque case à cocher devrait basculer son état, quel qu'il soit. Si vous avez 3 coché et 2 décoché, alors basculer fera les 3 premiers décochés et les 2 derniers cochés.

Pour cela, aucune des solutions ici ne fonctionne car elles font en sorte que toutes les cases à cocher aient le même état, plutôt que de basculer l'état de chaque case à cocher. Faire $(':checkbox').prop('checked') sur plusieurs cases à cocher renvoie le ET logique entre toutes les propriétés binaires .checked, c'est-à-dire que si l'une d'elles est décochée, la valeur renvoyée est false.

Vous devez utiliser .each() si vous souhaitez réellement activer chaque case à cocher plutôt que de les rendre identiques, par exemple.

   $(':checkbox').each(function () { this.checked = !this.checked; });

Notez que vous n'avez pas besoin de $(this) à l'intérieur du gestionnaire car la propriété .checked existe dans tous les navigateurs.

58
Normadize

Voici une autre façon que vous voulez.

$(document).ready(function(){   
    $('#checkp').toggle(
        function () { 
            $('.check').attr('Checked','Checked'); 
        },
        function () { 
            $('.check').removeAttr('Checked'); 
        }
    );
});
16
kst

Je pense que c'est plus simple de déclencher un clic:

$("#select-all-teammembers").click(function() {
    $("input[name=recipients\\[\\]]").trigger('click');
});                 
9
matt burns

Depuis jQuery 1.6, vous pouvez utiliser .prop(function) pour activer/désactiver l’état coché de chaque élément trouvé:

$("input[name=recipients\\[\\]]").prop('checked', function(_, checked) {
    return !checked;
});
8
Ja͢ck

La meilleure façon que je puisse penser.

$('#selectAll').change(function () {
    $('.reportCheckbox').prop('checked', this.checked);
});

ou

$checkBoxes = $(".checkBoxes");
$("#checkAll").change(function (e) {
    $checkBoxes.prop("checked", this.checked);
});   

ou

<input onchange="toggleAll(this)">
function toggleAll(sender) {
    $(".checkBoxes").prop("checked", sender.checked);
}
7
Dblock247

Utilisez ce plugin:

$.fn.toggleCheck  =function() {
       if(this.tagName === 'INPUT') {
           $(this).prop('checked', !($(this).is(':checked')));
       }

   }

Ensuite

$('#myCheckBox').toggleCheck();
7
Abdennour TOUMI

Voici un moyen jQuery pour activer les cases à cocher sans avoir à sélectionner une case à cocher avec html5 & labels:

 <div class="checkbox-list margin-auto">
    <label class="">Compare to Last Year</label><br>
    <label class="normal" for="01">
       <input id="01" type="checkbox" name="VIEW" value="01"> Retail units
    </label>
    <label class="normal" for="02">
          <input id="02" type="checkbox" name="VIEW" value="02">  Retail Dollars
    </label>
    <label class="normal" for="03">
          <input id="03" type="checkbox" name="VIEW" value="03">  GP Dollars
    </label>
    <label class="normal" for="04">
          <input id="04" type="checkbox" name="VIEW" value="04">  GP Percent
    </label>
</div>

  $("input[name='VIEW']:checkbox").change(function() {
    if($(this).is(':checked')) {  
         $("input[name='VIEW']:checkbox").prop("checked", false);
     $("input[name='VIEW']:checkbox").parent('.normal').removeClass("checked");
         $(this).prop("checked", true);
         $(this).parent('.normal').addClass('checked');
    }
    else{
         $("input[name='VIEW']").prop("checked", false);
         $("input[name='VIEW']").parent('.normal').removeClass('checked');
    }    
});

http://www.bootply.com/A4h6kAPshx

2
yardpenalty

En supposant que c'est une image qui doit basculer la case à cocher, cela fonctionne pour moi

<img src="something.gif" onclick="$('#checkboxid').prop('checked', !($('#checkboxid').is(':checked')));">
<input type="checkbox" id="checkboxid">
2
user1428592

La case à cocher Tout cocher doit être mise à jour elle-même sous certaines conditions. Essayez de cliquer sur '# select-all-teammembers' puis décochez quelques éléments et cliquez à nouveau sur tout sélectionner. Vous pouvez voir des incohérences. Pour l'empêcher, utilisez l'astuce suivante:

  var checkBoxes = $('input[name=recipients\\[\\]]');
  $('#select-all-teammembers').click(function() {
    checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    $(this).prop("checked", checkBoxes.is(':checked'));
  }); 

BTW toutes les cases à cocher DOM-object doivent être mis en cache comme décrit ci-dessus.

2
Anatoly

Une meilleure approche et UX

$('.checkall').on('click', function() {
   var $checks  = $('checks');
   var $ckall = $(this);

    $.each($checks, function(){
        $(this).prop("checked", $ckall.prop('checked'));
    });
});

$('checks').on('click', function(e){
   $('.checkall').prop('checked', false);
});
1
Hugo Dias

L'exemple le plus fondamental serait:

// get DOM elements
var checkbox = document.querySelector('input'),
    button = document.querySelector('button');

// bind "cilck" event on the button
button.addEventListener('click', toggleCheckbox);

// when clicking the button, toggle the checkbox
function toggleCheckbox(){
  checkbox.checked = !checkbox.checked;
};
<input type="checkbox">
<button>Toggle checkbox</button>
1
vsync

vous pouvez simplement utiliser ceci

$("#chkAll").on("click",function(){
    $("input[name=checkBoxName]").prop("checked",$(this).prop("checked"));
});
1
Fouad Mekkey
<table class="table table-datatable table-bordered table-condensed table-striped table-hover table-responsive">
<thead>
    <tr>
        <th class="col-xs-1"><a class="select_all btn btn-xs btn-info"> Select All </a></th>
        <th class="col-xs-2">#ID</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td><input type="checkbox" name="order333"/></td>
        <td>{{ order.id }}</td>
    </tr>
    <tr>
        <td><input type="checkbox" name="order334"/></td>
        <td>{{ order.id }}</td>
    </tr>
</tbody>                  
</table>

Essayer:

$(".table-datatable .select_all").on('click', function () {
    $("input[name^='order']").prop('checked', function (i, val) {
        return !val;
    });
});
1
Karol Gontarski

Vous pouvez écrire comme ça aussi

$(function() {
    $("#checkbox-toggle").click(function() {
        $('input[type=checkbox][name=checkbox_id\\[\\]]').click();
    });
});

Il suffit d'appeler la case à cocher lorsque l'événement est cliqué lorsque l'utilisateur clique sur le bouton portant l'id '# checkbox-toggle'.

1
Milan Malani
jQuery("#checker").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = true;
    });
});
jQuery("#dechecker").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = false;
    });
});
jQuery("#checktoggler").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = !this.checked;
    });
});

;)

1

si vous voulez basculer chaque case individuellement (ou si une seule case fonctionne aussi bien):

Je recommande d'utiliser .each (), car il est facile à modifier si vous voulez que des événements différents se produisent, tout en restant relativement court et facile à lire.

par exemple. :

// toggle all checkboxes, not all at once but toggle each one for its own checked state:
$('input[type="checkbox"]').each(function(){ this.checked = ! this.checked });

// check al even boxes, uncheck all odd boxes:
$('input[type="checkbox"]').each(function(i,cb){ cb.checked = (i%2 == 0); });

// set all to checked = x and only trigger change if it actually changed:
x = true;
$('input[type="checkbox"]').each(function(){
    if(this.checked != x){ this.checked = x; $(this).change();}  
});

sur une note de côté ... pas sûr pourquoi tout le monde utilise .attr () ou .prop () pour (dé) vérifier les choses.

pour autant que je sache, element.checked a toujours fonctionné de la même manière dans tous les navigateurs.

0
MoonLite

Ce code permet d'activer la case à cocher lorsque vous cliquez sur un animateur de commutateur à bascule utilisé dans les modèles Web. Remplacez ".onoffswitch-label" comme disponible dans votre code. "checkboxID" est la case à cocher basculée ici.

$('.onoffswitch-label').click(function () {
if ($('#checkboxID').prop('checked')) 
 {
   $('#checkboxID').prop('checked', false);
 }
else 
 {
   $('#checkboxID').prop('checked', true);
 }
});
0
Pranesh Janarthanan

à mon avis, l'homme le plus juste qui a suggéré la variante normale est GigolNet Gigolashvili, mais je veux suggérer une variante encore plus belle. Vérifie ça

$(document).on('click', '.fieldWrapper > label', function(event) {
    event.preventDefault()
    var n = $( event.target ).parent().find('input:checked').length
    var m = $( event.target ).parent().find('input').length
    x = n==m? false:true
    $( event.target ).parent().find('input').each(function (ind, el) {
        // $(el).attr('checked', 'checked');
        this.checked = x
    })
})
0
Arthur Sult

Celui-ci fonctionne très bien pour moi.

   $("#checkall").click(function() {
       var fruits = $("input[name=fruits\\[\\]]");
        fruits.prop("checked", $(this).prop("checked"));
    });
0
sovantha

Définir 'vérifié' ou null au lieu de vrai ou faux respectivement fera le travail.

// checkbox selection
var $chk=$(':checkbox');
$chk.prop('checked',$chk.is(':checked') ? null:'checked');
0
I.P.Singh