Bagaimana cara memeriksa semua kotak centang menggunakan jQuery?

118

Saya bukan ahli dengan jQuery tetapi saya telah mencoba membuat skrip kecil untuk aplikasi saya. Saya ingin mencentang semua kotak centang tetapi tidak berfungsi dengan benar.

Pertama saya mencoba menggunakan attrdan setelah itu saya mencoba proptetapi saya melakukan sesuatu yang salah.

Saya mencoba ini dulu:

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

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

Tapi ini tidak berhasil.

Berikutnya: Ini bekerja lebih baik daripada kode di atas

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

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

Kedua contoh tidak berhasil.

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

Ivan
sumber
kemungkinan duplikat .prop () vs .attr ()
Liam
Kemungkinan duplikat dari Pilih semua kotak centang dengan jQuery
Stewart
1
di sini adalah tautan ke codepen saya yang melakukan persis codepen ini.io/nickhq/pen/pZJVEr
Nixon Kosgei

Jawaban:

294

Anda perlu menggunakan .prop () untuk menyetel properti yang dicentang

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

Demo: Biola

Arun P Johny
sumber
1
Wow terima kasih atas jawaban yang cepat. Ini berfungsi dengan baik tetapi di aplikasi saya, saya memiliki satu cek palsu. ketika saya menyegarkan halaman ctrl+rdan mengklik kotak centang checkAlldia tidak memeriksa saya semua. Setelah itu saya harus mengecek lagi agar berhasil. Jadi saya perlu 2x klik pada apa checkAllyang tidak berfungsi pada satu klik (satu)? Saya salin tempel kode itu dan buat fungsi checkAll()dan di kotak centang saya setonclick="return checkAll()"
Ivan
3
Jika Anda akan menggunakan jQuery, gunakan jQuery. Bukan ide yang baik untuk mencampur jQuery dengan Javascript inline. Misalnya, ini buruk: <elementtag id="someID" onclick="javascript code here"--- Sebaliknya, gunakan jQuery:$('#someID').click(function() { checkAll() });
cssyphus
4
Apa perbedaan antara postingan Anda jawaban ini , kenapa dipakai not(this).prop?
shaijut
1
@ArunPJohny, id harus unik dalam satu halaman, bagaimana kita dapat menggunakan fungsi yang sama menggunakan contoh kelas jsfiddle.net/52uny55w
Krishna Jonnalagadda
@ArunPJohny, terima kasih atas waktunya. Saya ingin belajar banyak hal dari Anda di jquery, dapatkah Anda menyarankan saya di jquery
Krishna Jonnalagadda
44

Cukup gunakan checkedproperti dari checkAlldan gunakan prop () daripada attr untuk properti yang dicentang

Demo Langsung

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

Gunakan prop () bukan attr () untuk properti seperti yang dicentang

Mulai jQuery 1.6, metode .attr () mengembalikan tidak terdefinisi untuk atribut yang belum disetel. Untuk mengambil dan mengubah properti DOM seperti status elemen formulir yang diperiksa, dipilih, atau dinonaktifkan, gunakan metode .prop ()

Anda memiliki id yang sama untuk kotak centang dan harus unik . Anda lebih baik menggunakan beberapa kelas dengan kotak centang dependen sehingga tidak menyertakan kotak centang yang tidak Anda inginkan. Sebagai $('input:checkbox') akan memilih semua kotak centang di halaman. Jika halaman Anda diperpanjang dengan kotak centang baru maka mereka juga akan dipilih / tidak dipilih. Yang mungkin bukan perilaku yang diinginkan.

Demo Langsung

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

Solusi lengkap ada di sini.

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

Kotak centang tunggal pada kotak centang tiga akan dipilih dan hapus pilihan.

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

Semoga ini bisa membantu seseorang seperti yang terjadi pada saya.

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

SSR
sumber
3
Saya menyukai solusi ini karena jika Anda tidak mencentang salah satu kotak, kotak "Centang Semua" juga menjadi tidak dicentang. Demikian pula, jika Anda secara manual mencentang semua kotak yang sesuai, kotak "Centang Semua" juga ikut dicentang. Itu adalah umpan balik UI yang bagus di sana!
HPWD
Anda dapat mempersingkat $("#checkedAll").changefungsi dengan mengubahnya menjadi:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann
Juga, saya pikir lebih baik mengganti nama isAllCheckedvariabel menjadi isThereUncheckedatau unCheckedagar lebih deskriptif tentang apa variabel itu digunakan.
Gellie Ann
Saya mengambil solusi ini, inilah yang saya cari, terima kasih
Ajay Kumar
10

Saya pikir ketika pengguna memilih semua kotak centang secara manual maka centang harus dicentang secara otomatis atau pengguna tidak dicentang salah satunya dari semua kotak centang yang dipilih maka centang harus dicentang secara otomatis. ini kode saya ..

$('#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
sumber
Terima kasih! Saya lebih suka ini karena setelah semua kotak centang dicentang, ketika kami menghapus centang salah satunya, centang semua kotak centang tidak akan dicentang.
Rizqi N. Assyaufi
7

Mengapa Anda tidak mencoba ini (di baris ke-2 di mana 'formulir #' Anda perlu meletakkan pemilih yang tepat dari formulir html Anda):

$('.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);
   })               
});

HTML Anda harus seperti ini:

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

Saya harap itu membantu.

ioaniatr.dll
sumber
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

zarpio
sumber
4

Cara paling sederhana yang saya tahu:

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

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

Satu kotak centang untuk mengatur semuanya

Bagi orang yang masih mencari plugin untuk mengontrol kotak centang melalui yang ringan, memiliki dukungan out-of-the-box untuk UniformJS dan iCheck dan tidak dicentang ketika setidaknya satu dari kotak centang terkontrol tidak dicentang (dan dicentang ketika semua kotak centang terkontrol dicentang dari Tentu saja) Saya telah membuat plugin jQuery checkAll .

Jangan ragu untuk memeriksa contoh di halaman dokumentasi .


Untuk contoh pertanyaan ini, yang perlu Anda lakukan adalah:

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

Bukankah itu jelas dan sederhana?

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

Dan jquery

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

Anda dapat menjalankan .prop()hasil dari jQuery Selector secara langsung meskipun hasil tersebut mengembalikan lebih dari satu hasil. Begitu:

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

gema
sumber
0

Biasanya Anda juga ingin kotak centang master tidak dicentang jika setidaknya 1 kotak centang budak tidak dicentang dan dicentang jika semua kotak centang budak dicentang:

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

Dan jika Anda ingin mengaktifkan kontrol apa pun (misalnya Remove Alltombol atau Add Somethingtombol), saat setidaknya satu kotak centang dicentang dan nonaktifkan ketika tidak ada kotak centang yang dicentang:

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

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

Lihat Demo

Klik di sini untuk Melihat Demo

PK-1825
sumber
0

gunakan .prop () untuk mendapatkan nilai properti

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

Saya tahu ada banyak jawaban yang diposting di sini tetapi saya ingin memposting ini untuk pengoptimalan kode dan kami dapat menggunakannya secara global.

saya mencoba yang terbaik

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

Saya harap ini akan membantu!

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

checkall adalah id dari semua kotak centang dan cb-child adalah nama dari setiap kotak centang yang akan dicentang dan tidak dicentang tergantung pada peristiwa klik centang semua

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

* SKRIP JAWA UNTUK MEMILIH SEMUA KOTAK PERIKSA *

Solusi Terbaik .. Cobalah

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

Anda Dapat menggunakan Kode Sederhana di bawah ini:

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

Contoh Penggunaan:

<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
sumber
-1
if(isAllChecked == 0)
{ 
    $("#select_all").prop("checked", true); 
}   

tolong ubah baris di atas menjadi

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

dalam jawaban SSR dan kinerjanya sempurna. Terima kasih

Premjith
sumber
-1
if($('#chk_all').is(":checked"))
 {
    $('#'+id).attr('checked', true);
 }
else
 {
    $('#'+id).attr('checked', false);
 }  
Dsu Menaria
sumber
Akan berguna jika Anda menjelaskan jawabannya.
enkor
jika Anda mencentang kotak centang maka semua kotak centang dicentang sebagai ID dan kemudian Anda hapus centang pada kotak centang kemudian semua kotak centang tidak dicentang
Dsu Menaria
-1
 $('#checkall').on("click",function(){
      $('.chk').trigger("click");
   });
Bharat Parmar
sumber
-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
sumber
-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
sumber
kesalahan skrip dalam kode. skrip harus dimuat terlebih dahulu.
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
sumber
Kenapa fungsinya panjang?
Jimmy Obonyo Abor
-2

Klik Pemicu

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

ATAU

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

ATAU

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