Come controllare tutte le caselle di controllo usando jQuery?


118

Non sono esperto di jQuery ma ho provato a creare un piccolo script per la mia applicazione. Voglio controllare tutte le caselle di controllo ma non funziona correttamente.

Prima ho provato a usare attre dopo ho provato con propma sto facendo qualcosa di sbagliato.

Ho provato prima questo:

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

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

Ma questo non ha funzionato.

Avanti: ha funzionato meglio del codice precedente

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

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

Entrambi gli esempi non funzionano.

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


possibile duplicato di .prop () vs .attr ()
Liam


1
ecco un link al mio codepen che fa esattamente questo codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei

Risposte:


294

È necessario utilizzare .prop () per impostare la proprietà selezionata

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

Demo: violino


1
Wow, grazie per la risposta veloce. Funziona bene ma nella mia app ho un assegno falso. quando aggiorno la pagina ctrl+re checkAllfaccio clic sulla casella di controllo , non mi controlla tutto. Dopo di che devo ricontrollare per avere successo. Quindi ho bisogno di due volte clic su checkAllperché non funziona con un clic singolo (uno)? Copia incollo quel codice e creo la funzione checkAll()e nella casella di controllo ho impostatoonclick="return checkAll()"
Ivan

3
Se hai intenzione di utilizzare jQuery, usa jQuery. Non è una buona idea confondere jQuery con Javascript inline. Ad esempio, questo è un male: <elementtag id="someID" onclick="javascript code here"--- Invece, usa jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Qual è la differenza tra il tuo post e questa risposta, perché usata not(this).prop?
Shaijut

1
@ArunPJohny, l'id dovrebbe essere univoco in una singola pagina, come possiamo usare la stessa funzione usando l'esempio di classe jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ ArunPJohny, grazie per il tuo tempo. Voglio imparare molte cose da te su jquery, puoi suggerirmi su jquery
Krishna Jonnalagadda

44

Usa semplicemente la checkedproprietà di checkAlle usa prop () invece di attr per la proprietà selezionata

Dimostrazione dal vivo

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

Usa prop () invece di attr () per proprietà come check

A partire da jQuery 1.6, il metodo .attr () restituisce undefined per gli attributi che non sono stati impostati. Per recuperare e modificare le proprietà DOM come lo stato selezionato, selezionato o disabilitato degli elementi del modulo, utilizzare il metodo .prop ()

Hai lo stesso ID per le caselle di controllo e dovrebbe essere univoco . È meglio usare una classe con le caselle di controllo dipendenti in modo che non includa le caselle di controllo che non si desidera. As $('input:checkbox')selezionerà tutte le caselle di controllo nella pagina. Se la tua pagina viene estesa con nuove caselle di controllo, anche queste verranno selezionate / deselezionate. Che potrebbe non essere il comportamento previsto.

Dimostrazione dal vivo

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

41

Una soluzione completa è qui.

$(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 dovrebbe essere:

La singola casella di controllo sulle tre caselle di controllo contrassegnate sarà selezionata e deselezionata.

<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" />

Spero che questo aiuti qualcuno come ha fatto per me.

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


3
Mi piace questa soluzione poiché se deselezioni una delle caselle, anche la casella "Seleziona tutto" viene deselezionata. Allo stesso modo, se selezioni manualmente tutte le caselle corrispondenti, viene selezionata anche la casella "Seleziona tutto". Questo è un ottimo feedback sull'interfaccia utente!
HPWD

Puoi $("#checkedAll").changeabbreviare la funzione modificandola in:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann

Inoltre, penso che sia meglio rinominare la isAllCheckedvariabile in isThereUncheckedo unCheckedcosì sarà più descrittivo per cosa è stata utilizzata la variabile.
Gellie Ann,

Ho preso questa soluzione, questo è quello che cerco grazie
Ajay Kumar

10

Penso che quando l'utente seleziona manualmente tutte le caselle di controllo, il checkall dovrebbe essere selezionato automaticamente o l'utente ha deselezionato uno di essi da tutte le caselle di controllo selezionate, quindi il checkall dovrebbe essere deselezionato automaticamente. ecco il mio codice ..

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


Grazie! Preferisco questo perché dopo tutto la casella di controllo selezionata, quando ne deselezioniamo una, la casella di controllo sarà deselezionata.
Rizqi N. Assyaufi

7

Perché non provi questo (nella seconda riga dove 'form #' devi mettere il selettore appropriato del tuo form 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);
   })               
});

Il tuo html dovrebbe essere così:

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

Spero che aiuti.


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);
    }
  });
});

Demo: FIDDLE


4

Il modo più semplice che conosco:

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


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

1

Una casella di controllo per dominarli tutti

Per le persone che stanno ancora cercando un plug-in per controllare le caselle di controllo attraverso uno leggero, ha il supporto immediato per UniformJS e iCheck e viene deselezionato quando almeno una delle caselle di controllo controllate è deselezionata (e viene selezionata quando tutte le caselle di controllo controllate sono selezionate corso) Ho creato un plugin jQuery checkAll .

Sentiti libero di controllare gli esempi nella pagina della documentazione .


Per questo esempio di domanda tutto ciò che devi fare è:

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

Non è chiaro e semplice?


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

E jquery

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

1

È possibile eseguire direttamente .prop()sui risultati di un jQuery Selector anche se restituisce più di un risultato. Così:

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


0

Di solito si desidera anche che la casella di controllo principale sia deselezionata se almeno 1 casella di controllo slave è deselezionata e che sia selezionata se tutte le caselle di controllo slave sono selezionate:

/**
 * 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');
    }
    });
}

E se vuoi abilitare qualsiasi controllo (ad esempio un Remove Allpulsante o un Add Somethingpulsante), quando almeno una casella di controllo è selezionata e disabilita quando nessuna casella di controllo è selezionata:

/**
 * 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');
    }
}

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>

jQuery Code

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

Visualizza demo

Fare clic qui per visualizzare la demo


0

usa .prop () per ottenere il valore di una proprietà

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

0

So che ci sono molte risposte pubblicate qui, ma vorrei postare questo per l'ottimizzazione del codice e possiamo usarlo a livello globale.

ho fatto del mio meglio

/*----------------------------------------
 *  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);
    });
}

Spero che questo ti possa aiutare!


0
function checkAll(class_name) {
    $("." + class_name).each(function () { 
        if (this.checked == true) 
            this.checked = false; 
        else 
            this.checked = true; 
    }); 
}

0

checkall è l'ID di allcheck box e cb-child è il nome di ogni checkbox che sarà selezionata e deselezionata dipende dall'evento 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 = "";
                            });
                        }
                    });

0

* SCRIPT JAVA PER SELEZIONARE TUTTE LE CASELLE DI CONTROLLO *

Soluzione migliore .. Provalo

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

-1

Puoi usare il codice semplice di seguito:

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

Esempio di utilizzo:

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

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

si prega di modificare la riga sopra in

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

nella risposta di SSR e funziona perfettamente Grazie


-1
if($('#chk_all').is(":checked"))
 {
    $('#'+id).attr('checked', true);
 }
else
 {
    $('#'+id).attr('checked', false);
 }  

Sarebbe utile se spiegassi la risposta.
enkor

se si seleziona la casella di controllo, tutte le caselle di controllo vengono selezionate come ID e quindi si deseleziona la casella di controllo quindi tutte le caselle di controllo deselezionate
Dsu Menaria


-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);
    }
}

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

errore di script nel codice. lo script deve essere caricato prima.
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;
        }       
    }
}

Perché la funzione lunga?
Jimmy Obonyo Abor

-2

Fare clic su trigger

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

O

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

O

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.