Làm thế nào để kiểm tra tất cả các hộp kiểm bằng jQuery?


118

Tôi không phải là chuyên gia về jQuery nhưng tôi đã cố gắng tạo một tập lệnh nhỏ cho ứng dụng của mình. Tôi muốn kiểm tra tất cả các hộp kiểm nhưng nó không hoạt động chính xác.

Đầu tiên tôi đã cố gắng sử dụng attrvà sau đó tôi đã thử với propnhưng tôi đang làm sai.

Tôi đã thử điều này đầu tiên:

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

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

Nhưng điều này đã không hoạt động.

Tiếp theo: Điều này hoạt động tốt hơn mã trên

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

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

Cả hai ví dụ đều không hoạt động.

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


bản sao có thể có của .prop () so với .attr ()
Liam


1
đây là một liên kết đến codepen của tôi thực hiện chính xác codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei.

Câu trả lời:


294

Bạn cần sử dụng .prop () để đặt thuộc tính đã kiểm tra

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

Demo: Fiddle


1
Wow, cảm ơn vì câu trả lời nhanh. Điều này hoạt động tốt nhưng trong ứng dụng của tôi, tôi có một séc giả. khi tôi làm mới trang ctrl+rvà nhấp vào hộp kiểm checkAll, anh ấy không kiểm tra tôi tất cả. Sau đó, tôi phải kiểm tra lại để thành công. Vì vậy, tôi cần 2x nhấp chuột vào checkAllwhay không hoạt động với một nhấp chuột duy nhất? Tôi sao chép, dán mã đó và thực hiện chức năng checkAll()và trong hộp kiểm tôi đã đặtonclick="return checkAll()"
Ivan

3
Nếu bạn định sử dụng jQuery, thì hãy sử dụng jQuery. Không nên trộn jQuery với Javascript nội tuyến. Ví dụ, điều này là xấu: <elementtag id="someID" onclick="javascript code here"--- Thay vào đó, sử dụng jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Câu trả lời này có gì khác biệt giữa bài viết của bạn , tại sao lại được sử dụng not(this).prop?
shaijut

1
@ArunPJohny, id phải là duy nhất trong một trang duy nhất, làm thế nào chúng ta có thể sử dụng cùng một chức năng sử dụng lớp dụ jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ArunPJohny, cảm ơn bạn đã dành thời gian. Tôi muốn học nhiều điều từ bạn về jquery, bạn có thể gợi ý cho tôi về jquery
Krishna Jonnalagadda

44

Chỉ cần sử dụng thuộc checkedtính của checkAllvà sử dụng use prop () thay vì attr cho thuộc tính đã kiểm tra

Bản thử trực tiếp

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

Sử dụng prop () thay vì attr () cho các thuộc tính như đã chọn

Kể từ jQuery 1.6, phương thức .attr () trả về không xác định cho các thuộc tính chưa được đặt. Để truy xuất và thay đổi các thuộc tính DOM, chẳng hạn như trạng thái đã chọn, đã chọn hoặc đã tắt của các phần tử biểu mẫu, hãy sử dụng phương thức .prop ()

Bạn có cùng một id cho các hộp kiểm và nó phải là duy nhất . Tốt hơn bạn nên sử dụng một số lớp với các hộp kiểm phụ thuộc để nó không bao gồm các hộp kiểm bạn không muốn. Như $('input:checkbox')sẽ chọn tất cả các hộp kiểm trên trang. Nếu trang của bạn được mở rộng với các hộp kiểm mới thì chúng cũng sẽ được chọn / bỏ chọn. Đó có thể không phải là hành vi dự định.

Bản thử trực tiếp

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

41

Một giải pháp hoàn chỉnh là ở đây.

$(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 phải là:

Hộp kiểm đơn trên hộp kiểm ba đã chọn sẽ được chọn và bỏ chọn.

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

Hy vọng điều này sẽ giúp ích cho ai đó như nó đã làm cho tôi.

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


3
Tôi thích giải pháp này vì nếu bạn bỏ chọn một trong các hộp, hộp "Kiểm tra Tất cả" cũng sẽ không được chọn. Tương tự như vậy, nếu bạn chọn thủ công tất cả các hộp tương ứng, hộp "Kiểm tra Tất cả" cũng sẽ được chọn. Đó là phản hồi giao diện người dùng tuyệt vời ở đó!
HPWD

Bạn có thể làm cho $("#checkedAll").changehàm ngắn hơn bằng cách thay đổi nó thành:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann

Ngoài ra, tôi nghĩ tốt hơn nên đổi tên isAllCheckedbiến thành isThereUncheckedhoặc unCheckedlâu hơn nó sẽ mô tả nhiều hơn về những gì biến được sử dụng.
Gellie Ann

Tôi đã thực hiện giải pháp này, đây là điều tôi đang tìm kiếm cảm ơn
Ajay Kumar

10

Tôi nghĩ rằng khi người dùng chọn tất cả các hộp kiểm theo cách thủ công thì bảng kiểm sẽ được chọn tự động hoặc người dùng bỏ chọn một trong số chúng từ tất cả hộp kiểm đã chọn thì bảng kiểm sẽ được bỏ chọn tự động. đây là mã của tôi ..

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


Cảm ơn bạn! Tôi thích điều này hơn vì sau khi tất cả các hộp kiểm được chọn, khi chúng tôi bỏ chọn một trong số chúng, tất cả hộp kiểm sẽ được bỏ chọn.
Rizqi N. Assyaufi

7

Tại sao bạn không thử điều này (ở dòng thứ 2 nơi 'biểu mẫu #' bạn cần đặt bộ chọn thích hợp cho biểu mẫu html của mình):

$('.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 của bạn phải như thế này:

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

Tôi hy vọng rằng sẽ giúp.


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

Cách đơn giản nhất mà tôi biết:

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

Một hộp kiểm để thống trị tất cả

Đối với những người vẫn đang tìm kiếm plugin để kiểm soát các hộp kiểm thông qua một plugin nhẹ, có hỗ trợ ngoài hộp cho UniformJS và iCheck và được bỏ chọn khi bỏ chọn ít nhất một trong các hộp kiểm được kiểm soát (và được chọn khi tất cả các hộp kiểm được kiểm soát được chọn khóa học) Tôi đã tạo một plugin jQuery checkAll .

Vui lòng kiểm tra các ví dụ trên trang tài liệu .


Đối với câu hỏi ví dụ này, tất cả những gì bạn cần làm là:

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

Đó không phải là rõ ràng và đơn giản?


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

Và jquery

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

1

Bạn có thể chạy .prop()trực tiếp trên kết quả của Bộ chọn jQuery ngay cả khi nó trả về nhiều kết quả. Vì thế:

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


0

Thông thường, bạn cũng muốn bỏ chọn hộp kiểm chính nếu ít nhất 1 hộp kiểm phụ được bỏ chọn và được đánh dấu chọn nếu tất cả các hộp kiểm phụ được chọn:

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

Và nếu bạn muốn bật bất kỳ điều khiển nào (ví dụ: Remove Allnút hoặc một Add Somethingnút), khi ít nhất một hộp kiểm được chọn và tắt khi không có hộp kiểm nào được chọn:

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

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

Xem Demo

Bấm vào đây để xem Demo


0

sử dụng .prop () để nhận giá trị của một thuộc tính

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

0

Tôi biết có rất nhiều câu trả lời được đăng ở đây nhưng tôi muốn đăng điều này để tối ưu hóa mã và chúng tôi có thể sử dụng nó trên toàn cầu.

tôi đã cố gắng hết sức

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

Hy vọng điều này có thể giúp cho bạn!


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

0

checkall là id của allcheck box và cb-child là tên của mỗi hộp kiểm sẽ được chọn và bỏ chọn tùy thuộc vào sự kiện nhấp vào 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

* JAVA SCRIPT ĐỂ CHỌN TẤT CẢ HỘP KIỂM TRA *

Giải pháp tốt nhất .. Hãy thử nó

<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

Bạn có thể sử dụng mã đơn giản dưới đây:

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

Ví dụ để sử dụng:

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

vui lòng thay đổi dòng trên thành

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

trong câu trả lời của SSR và nó hoạt động hoàn hảo Cảm ơn bạn


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

Sẽ rất hữu ích nếu bạn giải thích câu trả lời.
enkor

nếu bạn đánh dấu vào hộp kiểm tra thì tất cả các hộp kiểm được kiểm tra như ID và sau đó bạn bỏ chọn hộp kiểm tra thì tất cả các hộp kiểm tra kiểm soát
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>

lỗi tập lệnh trong mã. script cần được tải trước.
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;
        }       
    }
}

Tại sao hàm dài?
Jimmy Obonyo Abor,

-2

Kích hoạt Nhấp chuột

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

HOẶC LÀ

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

HOẶC LÀ

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.