Jak sprawdzić wszystkie pola wyboru za pomocą jQuery?


118

Nie jestem ekspertem w zakresie jQuery, ale próbowałem stworzyć mały skrypt dla mojej aplikacji. Chcę zaznaczyć wszystkie pola wyboru, ale to nie działa poprawnie.

Najpierw próbowałem użyć, attra potem próbowałem, propale robię coś źle.

Najpierw spróbowałem tego:

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

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

Ale to nie zadziałało.

Dalej: To działało lepiej niż powyższy kod

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

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

Oba przykłady nie działają.

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


możliwy duplikat .prop () vs .attr ()
Liam


1
tutaj jest link do mojego codepen, który robi dokładnie to codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei

Odpowiedzi:


294

Aby ustawić zaznaczoną właściwość, musisz użyć .prop ()

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

Demo: Fiddle


1
Wow dzięki za szybką odpowiedź. To działa dobrze, ale w mojej aplikacji mam jeden fałszywy czek. kiedy odświeżam stronę ctrl+ri klikam pole wyboru checkAll, nie zaznacza mnie wszystkich. Następnie muszę ponownie sprawdzić, aby się powiodło. Więc potrzebuję 2x kliknięcia, checkAlldlaczego to nie działa po jednym kliknięciu (jednym)? Kopiuję, wklejam ten kod i tworzę funkcję checkAll()i ustawiam onclick="return checkAll()"
Ivan

3
Jeśli zamierzasz używać jQuery, użyj jQuery. Nie jest dobrym pomysłem mieszanie jQuery z wbudowanym Javascriptem. Na przykład to jest złe: <elementtag id="someID" onclick="javascript code here"--- Zamiast tego użyj jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Jaka jest różnica między Twojego posta to odpowiedź, dlaczego stosowane not(this).prop?
shaijut

1
@ArunPJohny, identyfikator powinien być unikalny na jednej stronie, jak możemy użyć tej samej funkcji na przykładzie klasy jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ArunPJohny, dziękuję za poświęcony czas. Chcę się nauczyć od Ciebie wielu rzeczy w jquery, czy możesz zasugerować mnie w jquery
Krishna Jonnalagadda

44

Po prostu użyj checkedwłaściwości checkAlli użyj prop () zamiast attr dla sprawdzonej właściwości

Live Demo

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

Użyj prop () zamiast attr () dla właściwości takich jak check

Od wersji jQuery 1.6 metoda .attr () zwraca wartość undefined dla atrybutów, które nie zostały ustawione. Aby pobrać i zmienić właściwości DOM, takie jak zaznaczony, zaznaczony lub wyłączony stan elementów formularza, użyj metody .prop ()

Masz ten sam identyfikator dla pól wyboru i powinien być unikalny . Lepiej użyj jakiejś klasy z zależnymi polami wyboru, aby nie zawierała pól wyboru , których nie chcesz. Tak jak $('input:checkbox') zaznaczy wszystkie pola wyboru na stronie. Jeśli Twoja strona zostanie rozszerzona o nowe pola wyboru, zostaną one również zaznaczone / odznaczone. Co może nie być zamierzonym zachowaniem.

Live Demo

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

41

Pełne rozwiązanie jest tutaj.

$(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 powinien być:

Pojedyncze pole wyboru na trzech zaznaczonych polach zostanie zaznaczone i odznaczone.

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

Mam nadzieję, że to komuś pomoże, tak jak dla mnie.

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


3
Podoba mi się to rozwiązanie, ponieważ jeśli odznaczysz jedno z pól, pole „Zaznacz wszystko” również zostanie odznaczone. Podobnie, jeśli ręcznie zaznaczysz wszystkie odpowiednie pola, pole „Zaznacz wszystko” również zostanie zaznaczone. To świetna opinia na temat interfejsu użytkownika!
HPWD

Możesz $("#checkedAll").changeskrócić funkcję, zmieniając ją na:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann

Myślę też, że lepiej jest zmienić nazwę isAllCheckedzmiennej na isThereUncheckedlub unCheckedtak, aby była bardziej opisowa, do czego zmienna została użyta.
Gellie Ann

Wziąłem to rozwiązanie, właśnie tego szukam dzięki
Ajay Kumar

10

Myślę, że gdy użytkownik zaznaczy wszystkie pola ręcznie, to checkall powinno być zaznaczone automatycznie lub użytkownik odznaczy jeden z nich ze wszystkich zaznaczonych pól wyboru, a następnie checkall powinno zostać automatycznie odznaczone. oto mój kod ..

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


Dziękuję Ci! Wolę to, ponieważ po zaznaczeniu wszystkich checkbox, gdy odznaczymy jeden z nich, zaznacz wszystkie checkbox będzie odznaczony.
Rizqi N. Assyaufi

7

Dlaczego nie spróbujesz tego (w drugiej linii, gdzie 'form #' musisz wstawić właściwy selektor swojego formularza 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);
   })               
});

Twój html powinien wyglądać tak:

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

Mam nadzieję że to pomogło.


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



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

1

Jedno pole wyboru, aby wszystkimi rządzić

Dla osób wciąż szukających wtyczki do kontrolowania pól wyboru za pomocą jednej, która jest lekka, ma gotową obsługę UniformJS i iCheck i zostaje odznaczona, gdy co najmniej jedno z kontrolowanych pól wyboru jest odznaczone (i zostaje zaznaczone, gdy wszystkie kontrolowane pola wyboru są zaznaczone Oczywiście) Stworzyłem wtyczkę jQuery checkAll .

Zapraszam do sprawdzenia przykładów na stronie dokumentacji .


W przypadku tego przykładu pytania wszystko, co musisz zrobić, to:

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

Czy to nie jest jasne i proste?


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

I jQuery

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

1

Możesz uruchomić .prop()wyniki selektora jQuery bezpośrednio, nawet jeśli zwraca więcej niż jeden wynik. Więc:

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


0

Zwykle chcesz również, aby pole wyboru master było odznaczone, jeśli co najmniej 1 pole wyboru slave jest odznaczone, i aby było sprawdzane, jeśli zaznaczone są wszystkie pola wyboru slave:

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

A jeśli chcesz włączyć dowolną kontrolę (np. Remove AllPrzycisk lub Add Somethingprzycisk), gdy przynajmniej jedno pole wyboru jest zaznaczone i wyłącz, gdy nie jest zaznaczone pole wyboru:

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

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

Zobacz demo

Kliknij tutaj, aby wyświetlić demo


0

użyj .prop (), aby uzyskać wartość właściwości

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

0

Wiem, że jest tutaj wiele odpowiedzi, ale chciałbym opublikować to w celu optymalizacji kodu i możemy go używać na całym świecie.

Robiłem co w mojej mocy

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

Mam nadzieję, że to pomoże!


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

0

checkall to identyfikator pola wyboru, a cb-child to nazwa każdego pola wyboru, które będzie zaznaczone i odznaczone w zależności od zdarzenia kliknięcia checkall

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

* SKRYPT JAVA, ABY WYBRAĆ WSZYSTKIE POLE DO ZADANIA *

Najlepsze rozwiązanie ... Wypróbuj

<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

Możesz użyć poniższego prostego kodu:

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

Przykład użycia:

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

proszę zmienić powyższą linię na

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

w odpowiedzi SSR i działa idealnie Dziękuję


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

Byłoby przydatne, gdybyś wyjaśnił odpowiedź.
enkor

jeśli zaznaczysz to pole wyboru, wszystkie pola wyboru są zaznaczone jako ID, a następnie
odznaczasz


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

błąd skryptu w kodzie. skrypt należy najpierw załadować.
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;
        }       
    }
}

Dlaczego długa funkcja?
Jimmy Obonyo Abor

-2

Trigger Click

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

LUB

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

LUB

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.