Comment cocher toutes les cases à l'aide de jQuery?

118

Je ne suis pas expert avec jQuery mais j'ai essayé de créer un petit script pour mon application. Je veux cocher toutes les cases mais cela ne fonctionne pas correctement.

J'ai d'abord essayé de l'utiliser attret après cela, j'ai essayé avec propmais je fais quelque chose de mal.

J'ai essayé ceci en premier:

$("#checkAll").change(function(){

  if (! $('input:checkbox').is('checked')) {
      $('input:checkbox').attr('checked','checked');
  } else {
      $('input:checkbox').removeAttr('checked');
  }       
});

Mais cela n'a pas fonctionné.

Suivant: Cela fonctionnait mieux que le code ci-dessus

$("#checkAll").change(function(){

  if (! $('input:checkbox').is('checked')) {
      $('input:checkbox').prop('checked',true);
  } else {
      $('input:checkbox').prop('checked', false);
  }       
});

Les deux exemples ne fonctionnent pas.

JSFiddle: http://jsfiddle.net/hhZfu/4/

Ivan
la source
duplication possible de .prop () vs .attr ()
Liam
1
voici un lien vers mon codepen qui fait exactement ce codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei

Réponses:

294

Vous devez utiliser .prop () pour définir la propriété vérifiée

$("#checkAll").click(function(){
    $('input:checkbox').not(this).prop('checked', this.checked);
});

Démo: Fiddle

Arun P Johny
la source
1
Wow merci pour une réponse rapide. Cela fonctionne bien, mais dans mon application, j'ai un faux chèque. quand je rafraîchis la page ctrl+ret clique sur la case à cocher, checkAllil ne me vérifie pas tout. Après cela, je dois vérifier à nouveau pour réussir. J'ai donc besoin de 2x cliquez sur checkAllwhay qui ne fonctionne pas en un seul clic (un)? Je copie coller ce code et faire la fonction checkAll()et dans la case à cocher je définisonclick="return checkAll()"
Ivan
3
Si vous allez utiliser jQuery, utilisez jQuery. Ce n'est pas une bonne idée de mélanger jQuery avec Javascript en ligne. Par exemple, c'est mauvais: <elementtag id="someID" onclick="javascript code here"--- Utilisez plutôt jQuery:$('#someID').click(function() { checkAll() });
cssyphus
4
Quelle est la différence entre votre message cette réponse, pourquoi utilisé not(this).prop?
shaijut
1
@ArunPJohny, id doit être unique dans une seule page, comment nous pouvons utiliser la même fonction en utilisant l'exemple de classe jsfiddle.net/52uny55w
Krishna Jonnalagadda
@ArunPJohny, merci pour votre temps. Je veux apprendre beaucoup de choses de vous sur jquery, pouvez-vous me suggérer sur jquery
Krishna Jonnalagadda
44

Utilisez simplement la checkedpropriété du checkAllet utilisez use prop () au lieu de attr pour la propriété vérifiée

Démo en direct

 $('#checkAll').click(function () {    
     $('input:checkbox').prop('checked', this.checked);    
 });

Utilisez prop () au lieu de attr () pour les propriétés comme vérifié

Depuis jQuery 1.6, la méthode .attr () retourne undefined pour les attributs qui n'ont pas été définis. Pour récupérer et modifier les propriétés DOM telles que l'état coché, sélectionné ou désactivé des éléments de formulaire, utilisez la méthode .prop ()

Vous avez le même identifiant pour les cases à cocher et il doit être unique . Vous feriez mieux d'utiliser une classe avec les cases à cocher dépendantes afin qu'elle n'inclue pas les cases à cocher que vous ne souhaitez pas. Comme $('input:checkbox')sélectionnera toutes les cases à cocher de la page. Si votre page est étendue avec de nouvelles cases à cocher, elles seront également sélectionnées / désélectionnées. Ce qui pourrait ne pas être le comportement prévu.

Démo en direct

$('#checkAll').click(function () {    
    $(':checkbox.checkItem').prop('checked', this.checked);    
});
Adil
la source
41

Une solution complète est ici.

$(document).ready(function() {
    $("#checkedAll").change(function() {
        if (this.checked) {
            $(".checkSingle").each(function() {
                this.checked=true;
            });
        } else {
            $(".checkSingle").each(function() {
                this.checked=false;
            });
        }
    });

    $(".checkSingle").click(function () {
        if ($(this).is(":checked")) {
            var isAllChecked = 0;

            $(".checkSingle").each(function() {
                if (!this.checked)
                    isAllChecked = 1;
            });

            if (isAllChecked == 0) {
                $("#checkedAll").prop("checked", true);
            }     
        }
        else {
            $("#checkedAll").prop("checked", false);
        }
    });
});

Html doit être:

La case à cocher unique sur la case à cocher trois cochée sera sélectionnée et désélectionnée.

<input type="checkbox" name="checkedAll" id="checkedAll" />

<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />

J'espère que cela aide quelqu'un comme cela a été le cas pour moi.

JS Fiddle https://jsfiddle.net/52uny55w/

SSR
la source
3
J'aime cette solution car si vous décochez l'une des cases, la case «Cocher tout» devient également décochée. De même, si vous cochez manuellement toutes les cases correspondantes, la case «Vérifier tout» est également cochée. C'est un excellent retour sur l'interface utilisateur!
HPWD
Vous pouvez $("#checkedAll").changeraccourcir la fonction en la remplaçant par:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann
De plus, je pense qu'il est préférable de renommer la isAllCheckedvariable en isThereUncheckedou unCheckedalors ce sera plus descriptif sur ce à quoi la variable a été utilisée.
Gellie Ann le
J'ai pris cette solution, c'est ce que je cherche merci
Ajay Kumar
10

Je pense que lorsque l'utilisateur sélectionne toutes les cases à cocher manuellement, checkall doit être coché automatiquement ou l'utilisateur décoche l'un d'entre eux de toutes les cases sélectionnées, puis checkall doit être décoché automatiquement. voici mon code ..

$('#checkall').change(function () {
    $('.cb-element').prop('checked',this.checked);
});

$('.cb-element').change(function () {
 if ($('.cb-element:checked').length == $('.cb-element').length){
  $('#checkall').prop('checked',true);
 }
 else {
  $('#checkall').prop('checked',false);
 }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<input type="checkbox" name="all" id="checkall" />Check All</br>
<input type="checkbox" class="cb-element" /> Checkbox  1</br>
<input type="checkbox" class="cb-element" /> Checkbox  2</br>
<input type="checkbox" class="cb-element" /> Checkbox  3

Ankit
la source
Je vous remercie! Je préfère cela car une fois toutes les cases cochées, lorsque nous décocherons l'une d'elles, toutes les cases à cocher seront décochées.
Rizqi N.Assyaufi
7

Pourquoi n'essayez-vous pas ceci (dans la 2ème ligne où 'form #' vous devez mettre le sélecteur approprié de votre formulaire html):

$('.checkAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',true);
   })               
});

$('.uncheckAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',false);
   })               
});

Votre html devrait ressembler à ceci:

<form id="myForm">
      <span class="checkAll">checkAll</span>
      <span class="uncheckAll">uncheckAll</span>
      <input type="checkbox" class="checkSingle"></input>
      ....
</form>

J'espère que cela aide.

ioaniatr
la source
5

HTML:

<p><input type="checkbox" id="parent" /> Check/Uncheck All</p>
<ul>
  <li>
    <input type="checkbox" class="child" /> Checkbox 1</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 2</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 3</li>
</ul>

jQuery:

$(document).ready(function() {
  $("#parent").click(function() {
    $(".child").prop("checked", this.checked);
  });

  $('.child').click(function() {
    if ($('.child:checked').length == $('.child').length) {
      $('#parent').prop('checked', true);
    } else {
      $('#parent').prop('checked', false);
    }
  });
});

Démo: FIDDLE

Zarpio
la source
4

La manière la plus simple que je connaisse:

$('input[type="checkbox"]').prop("checked", true);

Davidson Lima
la source
2
$('#checkAll').on('change', function(){
    if($(this).attr('checked')){
        $('input[type=checkbox]').attr('checked',true);
    }
    else{
        $('input[type=checkbox]').removeAttr('checked');
    }
});
Ensoleillé
la source
1

Une case à cocher pour les gouverner tous

Pour les personnes qui recherchent toujours un plugin pour contrôler les cases à cocher via un plugin léger, qui prend en charge immédiatement UniformJS et iCheck et n'est pas coché lorsqu'au moins une des cases contrôlées est décochée (et est cochée lorsque toutes les cases contrôlées sont cochées sur Bien sûr) J'ai créé un plugin jQuery checkAll .

N'hésitez pas à consulter les exemples sur la page de documentation .


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

$( "#checkAll" ).checkall({
    target: "input:checkbox"
});

N'est-ce pas clair et simple?

nass
la source
1
    <p id="checkAll">Check All</p>
<hr />
<input type="checkbox" class="checkItem">Item 1
<input type="checkbox" class="checkItem">Item 2
<input type="checkbox" class="checkItem">Item3

Et jquery

$(document).on('click','#checkAll',function () {
     $('.checkItem').not(this).prop('checked', this.checked);
 });
demenvil
la source
1

Vous pouvez exécuter .prop()directement sur les résultats d'un sélecteur jQuery même s'il renvoie plusieurs résultats. Alors:

$("input[type='checkbox']").prop('checked', true)

écho
la source
0

Habituellement, vous voulez également que la case à cocher maître soit décochée si au moins 1 case esclave est décochée et qu'elle soit cochée si toutes les cases esclaves sont cochées:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAll(masterId, slaveName) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

Et si vous souhaitez activer n'importe quel contrôle (par exemple, un Remove Allbouton ou un Add Somethingbouton), lorsqu'au moins une case est cochée et désactivez-la lorsqu'aucune case n'est cochée:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes,
 * enables or disables a control when a checkbox is checked
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAllAndSwitchControl(masterId, slaveName, controlId) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        switchControl(controlId, $slave.filter(':checked').length > 0);
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

/**
 * Enables or disables a control
 * @param controlId is the control-id
 * @param enable is true, if control must be enabled, or false if not
 */
function switchControl(controlId, enable) {
    var $control = $('#' + controlId);
    if (enable) {
        $control.removeProp('disabled');
    } else {
        $control.prop('disabled', 'disabled');
    }
}
Niveau faible
la source
0

HTML

<HTML>
<HEAD>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
</HEAD>
<BODY>
    <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
<table border="1">
<tr>
    <th><input type="checkbox" id="selectall"/></th>
    <th>Cell phone</th>
    <th>Rating</th>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
    <td>BlackBerry Bold 9650</td>
    <td>2/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
    <td>Samsung Galaxy</td>
    <td>3.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
    <td>Droid X</td>
    <td>4.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
    <td>HTC Desire</td>
    <td>3/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
    <td>Apple iPhone 4</td>
    <td>5/5</td>
</tr>
</table>

</BODY>
</HTML>

Code jQuery

<SCRIPT language="javascript">
$(function(){

    // add multiple select / deselect functionality
    $("#selectall").click(function () {
          $('.case').attr('checked', this.checked);
    });

    // if all checkbox are selected, check the selectall checkbox
    // and viceversa
    $(".case").click(function(){

        if($(".case").length == $(".case:checked").length) {
            $("#selectall").attr("checked", "checked");
        } else {
            $("#selectall").removeAttr("checked");
        }

    });
});
</SCRIPT>

Voir la démo

Cliquez ici pour voir la démo

PK-1825
la source
0

utilisez .prop () pour obtenir la valeur d'une propriété

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});
phénix
la source
0

Je sais qu'il y a beaucoup de réponses publiées ici, mais je voudrais publier ceci pour l'optimisation du code et nous pouvons l'utiliser dans le monde entier.

j'ai fait de mon mieux

/*----------------------------------------
 *  Check and uncheck checkbox which will global
 *  Params : chk_all_id=id of main checkbox which use for check all dependant, chk_child_pattern=start pattern of the remain checkboxes 
 *  Developer Guidline : For to implement this function Developer need to just add this line inside checkbox {{ class="check_all" dependant-prefix-id="PATTERN_WHATEVER_U_WANT" }}
 ----------------------------------------*/
function checkUncheckAll(chk_all_cls,chiled_patter_key){
    if($("."+chk_all_cls).prop('checked') == true){
        $('input:checkbox[id^="'+chiled_patter_key+'"]').prop('checked', 'checked');
    }else{
        $('input:checkbox[id^="'+chiled_patter_key+'"]').removeProp('checked', 'checked');
    }        
}

if($(".check_all").get(0)){
    var chiled_patter_key = $(".check_all").attr('dependant-prefix-id');

    $(".check_all").on('change',function(){        
        checkUncheckAll('check_all',chiled_patter_key);
    });

    /*------------------------------------------------------
     * this will remain checkbox checked if already checked before ajax call! :)
     ------------------------------------------------------*/
    $(document).ajaxComplete(function() {
        checkUncheckAll('check_all',chiled_patter_key);
    });
}

J'espère que cela aidera!

Ashok Chandrapal
la source
0
function checkAll(class_name) {
    $("." + class_name).each(function () { 
        if (this.checked == true) 
            this.checked = false; 
        else 
            this.checked = true; 
    }); 
}
Ganga Reddy
la source
0

checkall est l'id de allcheck box et cb-child est le nom de chaque case à cocher qui sera cochée et décochée en fonction de l'événement checkall click

$("#checkall").click(function () {
                        if(this.checked){
                            $("input[name='cb-child']").each(function (i, el) {
                                el.setAttribute("checked", "checked");
                                el.checked = true;
                                el.parentElement.className = "checked";

                            });
                        }else{
                            $("input[name='cb-child']").each(function (i, el) {
                                el.removeAttribute("checked");
                                el.parentElement.className = "";
                            });
                        }
                    });
TanvirChowdhury
la source
0

* JAVA SCRIPT POUR SÉLECTIONNER TOUTES LES CHÈQUES *

Meilleure solution. Essayez-le

<script type="text/javascript">
        function SelectAll(Id) {
            //get reference of GridView control
            var Grid = document.getElementById("<%= GridView1.ClientID %>");
            //variable to contain the cell of the Grid
            var cell;

            if (Grid.rows.length > 0) {
                //loop starts from 1. rows[0] points to the header.
                for (i = 1; i < grid.rows.length; i++) {
                    //get the reference of first column
                    cell = grid.rows[i].cells[0];

                    //loop according to the number of childNodes in the cell
                    for (j = 0; j < cell.childNodes.length; j++) {
                        //if childNode type is CheckBox                 
                        if (cell.childNodes[j].type == "checkbox") {
                            //Assign the Status of the Select All checkbox to the cell checkbox within the Grid
                            cell.childNodes[j].checked = document.getElementById(Id).checked;
                        }
                    }
                }
            }
        }
    </script>
JIYAUL MUSTAPHA
la source
-1

Vous pouvez utiliser ci-dessous le code simple:

function checkDelBoxes(pForm, boxName, parent)
{
    for (i = 0; i < pForm.elements.length; i++)
        if (pForm.elements[i].name == boxName)
            pForm.elements[i].checked = parent;
}

Exemple d'utilisation:

<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', true);return false;"> Select All
</a>
<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', false);return false;"> Unselect All
</a>
Navid Vakili
la source
-1
if(isAllChecked == 0)
{ 
    $("#select_all").prop("checked", true); 
}   

veuillez changer la ligne ci-dessus en

if(isAllChecked == 0)
{ 
    $("#checkedAll").prop("checked", true); 
}   

dans la réponse de SSR et son fonctionnement parfait Merci

Premjith
la source
-1
if($('#chk_all').is(":checked"))
 {
    $('#'+id).attr('checked', true);
 }
else
 {
    $('#'+id).attr('checked', false);
 }  
Dsu Menaria
la source
Ce serait pratique si vous expliquiez la réponse.
enkor
si vous cochez la case, toutes les cases à cocher sont cochées en tant qu'ID, puis vous décochez la case puis toutes les cases à cocher sont décochées
Dsu Menaria
-1
 $('#checkall').on("click",function(){
      $('.chk').trigger("click");
   });
Bharat Parmar
la source
-1

html:

    <div class="col-md-3 general-sidebar" id="CategoryGrid">
                                                    <h5>Category &amp; Sub Category <span style="color: red;">* </span></h5>
                                                    <div class="checkbox">
                                                        <label>
                                                            <input onclick="checkUncheckAll(this)" type="checkbox">
                                                            All
                                                        </label>
                                                    </div>
                                                <div class="checkbox"><label><input class="cat" type="checkbox" value="Quality">Quality</label></div>
<div class="checkbox"><label><input class="subcat" type="checkbox" value="Planning process and execution">Planning process and execution</label></div>

javascript:

function checkUncheckAll(ele) {
    if (ele.checked) {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
    else {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
}
Jaydeep Shil
la source
-1
            <pre>
            <SCRIPT language="javascript">
            $(function(){
                // add multiple select / deselect functionality
                $("#selectall").click(function () {
                      $('.case').attr('checked', this.checked);
                });

                // if all checkbox are selected, check the selectall checkbox
                // and viceversa
                $(".case").click(function(){

                    if($(".case").length == $(".case:checked").length) {
                        $("#selectall").attr("checked", "checked");
                    } else {
                        $("#selectall").removeAttr("checked");
                    }

                });
            });
            </SCRIPT>
            <HTML>
            <HEAD>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
            <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
            </HEAD>
            <BODY>
            <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
            <table border="1">
              <tr>
                <th><input type="checkbox" id="selectall"/></th>
                <th>Cell phone</th>
                <th>Rating</th>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
                <td>BlackBerry Bold 9650</td>
                <td>2/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
                <td>Samsung Galaxy</td>
                <td>3.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
                <td>Droid X</td>
                <td>4.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
                <td>HTC Desire</td>
                <td>3/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
                <td>Apple iPhone 4</td>
                <td>5/5</td>
              </tr>
            </table>
            </BODY>
            </HTML>
            </pre>
Pramod Jain
la source
erreur de script dans le code. le script doit être chargé en premier.
Satish Shetty
-1
function chek_al_indi(id)
{
    var k = id;
    var cnt_descriptiv_indictr = eval($('#cnt_descriptiv_indictr').val());
    var std_cnt = 10;

    if ($('#'+ k).is(":checked"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',true);  
            k = k + cnt_descriptiv_indictr;
        }
    }

    if ($('#'+ k).is(":not(:checked)"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',false);     
            k = k + cnt_descriptiv_indictr;
        }       
    }
}
Dsu Menaria
la source
Pourquoi la fonction longue?
Jimmy Obonyo Abor
-2

Clic de déclenchement

$("#checkAll").click(function(){
    $('input:checkbox').click();
});

OU

$("#checkAll").click(function(){
    $('input:checkbox').trigger('click');
});

OU

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
jmn
la source