Làm cách nào để kiểm tra / bỏ chọn tất cả các hộp kiểm bằng một nút bằng jQuery?


158

Tôi đang cố gắng kiểm tra / bỏ chọn tất cả các hộp kiểm bằng jQuery. Bây giờ bằng cách chọn / bỏ chọn hộp kiểm cha, tất cả các hộp kiểm con sẽ được chọn / bỏ chọn cùng với văn bản của hộp kiểm cha được thay đổi thành checkall / uncheckall.

Bây giờ tôi muốn thay thế hộp kiểm cha bằng nút nhập và cũng thay đổi văn bản trên nút để kiểm tra / bỏ chọn. Đây là mã, bất cứ ai có thể xin vui lòng chỉnh sửa mã?

    $( function() {
        $( '.checkAll' ).live( 'change', function() {
            $( '.cb-element' ).attr( 'checked', $( this ).is( ':checked' ) ? 'checked' : '' );
            $( this ).next().text( $( this ).is( ':checked' ) ? 'Uncheck All' : 'Check All' );
        });
        $( '.cb-element' ).live( 'change', function() {
            $( '.cb-element' ).length == $( '.cb-element:checked' ).length ? $( '.checkAll' ).attr( 'checked', 'checked' ).next().text( 'Uncheck All' ) : $( '.checkAll' ).attr( 'checked', '' ).next().text( 'Check All' );

        });
    });


   <input type="checkbox" class="checkAll" /> <b>Check All</b>

   <input type="checkbox" class="cb-element" /> Checkbox  1
   <input type="checkbox" class="cb-element" /> Checkbox  2
   <input type="checkbox" class="cb-element" /> Checkbox  3


Kiểm tra Hướng dẫn với jQuery freakyjolly.com/ từ
Code Spy

Câu trả lời:


228

Hãy thử cái này:

$(document).ready(function(){
    $('.check:button').toggle(function(){
        $('input:checkbox').attr('checked','checked');
        $(this).val('uncheck all');
    },function(){
        $('input:checkbox').removeAttr('checked');
        $(this).val('check all');        
    })
})

BẢN GIỚI THIỆU


6
-1 khi chuyển đổi không có nghĩa là để làm việc như vậy: api.jquery.com/toggle (ít nhất là phiên bản hiện tại)
estani

2
Chỉ hoạt động cho một nút, nếu bạn cần một số thì tốt nhất nên sử dụng.click()
foochow

5
Cảnh giác: câu trả lời này kiểm tra theo nghĩa đen mọi hộp kiểm trong biểu mẫu của bạn. Bỏ qua trừ khi bạn muốn điều đó. Đối với nhiều séc, câu trả lời này đã giúp tôi: stackoverflow.com/a/27148382
43248554

1
Tôi đã thử mã này, nhưng tại sao hộp kiểm của tôi biến mất? xD và nó có thuộc tính "display: none" trên đó
melvnberd

10
Với các phiên bản mới nhất của jQuery .attr()removeAttr()không nên được sử dụng với thuộc tính "đã kiểm tra". Như removeAttr()sẽ loại bỏ thuộc tính thay vì đặt nó thành false. .prop('checked', true)hoặc .prop('checked', false)nên được sử dụng thay thế, như được giải thích trong câu trả lời @ richard-garside.
David Torres

110

Đây là cách ngắn nhất tôi tìm thấy (cần jQuery1.6 +)

HTML:

<input type="checkbox" id="checkAll"/>

JS:

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

Tôi đang sử dụng .prop vì .attr không hoạt động đối với các hộp kiểm trong jQuery 1.6+ trừ khi bạn rõ ràng đã thêm một thuộc tính được kiểm tra vào thẻ đầu vào của bạn.

Thí dụ-

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="#">
    <p><label><input type="checkbox" id="checkAll"/> Check all</label></p>
    
    <fieldset>
        <legend>Loads of checkboxes</legend>
        <p><label><input type="checkbox" /> Option 1</label></p>
        <p><label><input type="checkbox" /> Option 2</label></p>
        <p><label><input type="checkbox" /> Option 3</label></p>
        <p><label><input type="checkbox" /> Option 4</label></p>
    </fieldset>
</form>


Làm thế nào để bạn sử dụng cái này? Bất kỳ cơ hội để nhìn thấy một fiddle?
Drewdavid

1
Câu trả lời đơn giản, nhưng OP muốn có một nút
vphilipnyc

Làm thế nào để bạn "bỏ chọn tất cả" theo cách này?
Michal Skop

@MichalSkop Mã này chọn hoặc bỏ chọn dựa trên việc #checkAll có được kiểm tra hay không. Nếu bạn muốn bỏ chọn tất cả thì bạn chỉ có thể sử dụng giá trị false như $ ("input: hộp kiểm"). Prop ('đã kiểm tra', sai);
Richard Garside

Cảm ơn, rất dễ!
viniciussvl

17

Hãy thử cái này:

HTML

<input type="checkbox" name="all" id="checkall" />

JavaScript

$('#checkall:checkbox').change(function () {
   if($(this).attr("checked")) $('input:checkbox').attr('checked','checked');
   else $('input:checkbox').removeAttr('checked');
});​

BẢN GIỚI THIỆU


Có, cảm ơn mã này hoàn hảo, ngay cả khi nó thay đổi từ DOM LEVEL. Tôi đã cố gắng viết mã, nhưng thậm chí tôi đã thử các plugin khác không hoạt động .. Cái này là hoàn hảo.
Rafee

14

Html

<input type="checkbox" name="select_all" id="select_all" class="checkAll" />

Javascript

    $('.checkAll').click(function(){
    if($(this).attr('checked')){
        $('input:checkbox').attr('checked',true);
    }
    else{
        $('input:checkbox').attr('checked',false);
    }
});

6
Sử dụng .prop thay vì .attr nếu bạn đang sử dụng jQuery1.6 +
Richard Garside

5

Giải pháp cho các hộp kiểm chuyển đổi bằng cách sử dụng một nút, tương thích với jQuery 1.9+ trong đó sự kiện toogle không còn khả dụng :

$('.check:button').click(function(){
      var checked = !$(this).data('checked');
      $('input:checkbox').prop('checked', checked);
      $(this).val(checked ? 'uncheck all' : 'check all' )
      $(this).data('checked', checked);
});

BẢN GIỚI THIỆU


Thay thế nút bằng một hộp kiểm và "hộp kiểm: đầu vào" bằng một lớp, cho mục đích của tôi, và điều này đã làm việc rất tốt!
RationalRmus

5

Thử cái này:

$('.checkAll').on('click', function(e) {
     $('.cb-element').prop('checked', $(e.target).prop('checked'));
});

elà sự kiện được tạo khi bạn thực hiện clicke.targetlà phần tử được nhấp ( .checkAll), vì vậy bạn chỉ phải đặt thuộc tính checkedcủa các phần tử với lớp .cb-elementgiống như phần tử với lớp .checkAll`.

PS: Xin lỗi tiếng Anh của tôi!


1
Này Ruben, bạn nên thêm một nhận xét vào câu trả lời của mình để OP có thể hiểu chính xác bạn đã giải quyết vấn đề đó như thế nào
edi9999

Cảm ơn sự giúp đỡ của bạn @ edi9999, tôi là người mới bắt đầu
Ruben Perez

1
Câu trả lời này là IMO tốt hơn vì câu trả lời được chấp nhận sẽ kiểm tra tất cả các hộp kiểm trên biểu mẫu của bạn , trong khi mẫu của bạn cho phép bạn dễ dàng nhắm mục tiêu các phần tử HTML khác nhau $ ("# id") hoặc $ (". Class") thông qua một mẫu như $('#all_news_items').on('click', function(e) { $('.news-item-option').prop('checked', $(e.target).prop('checked')); }); không có séc các chức năng can thiệp vào các yếu tố hình thức khác, vì vậy bạn có thể dễ dàng thêm một séc mới:$('#all_specializations').on('click', function(e) { $('.specialization-option').prop('checked', $(e.target).prop('checked')); });
Kelsey Hannan

4

Bạn có thể thử cái này

    $('.checkAll').on('click',function(){
        $('.checkboxes').prop('checked',$(this).prop("checked"));
    });`

Lớp .checkAlllà một hộp kiểm soát hành động hàng loạt


3

Đồng ý với câu trả lời ngắn gọn của Richard Garside, nhưng thay vì sử dụng prop()trong $(this).prop("checked")bạn có thể sử dụng thuộc tính JS gốc checkedcủa hộp kiểm như,

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="#">
    <p><label><input type="checkbox" id="checkAll"/> Check all</label></p>
    
    <fieldset>
        <legend>Loads of checkboxes</legend>
        <p><label><input type="checkbox" /> Option 1</label></p>
        <p><label><input type="checkbox" /> Option 2</label></p>
        <p><label><input type="checkbox" /> Option 3</label></p>
        <p><label><input type="checkbox" /> Option 4</label></p>
    </fieldset>
</form>


3

Kiểm tra / Bỏ chọn Tất cả với thuộc tính Trung gian bằng jQuery

Nhận các mục đã kiểm tra trong mảng bằng phương thức getSelectedItems ()

Danh sách hộp kiểm tra nguồn Chọn / Bỏ chọn tất cả với Kiểm tra tổng thể không xác định

nhập mô tả hình ảnh ở đây

HTML

<div class="container">
  <div class="card">
    <div class="card-header">
      <ul class="list-group list-group-flush">
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="selectAll"
            id="masterCheck"
          />
          <label class="form-check-label" for="masterCheck">
            Select / Unselect All
          </label>
        </li>
      </ul>
    </div>
    <div class="card-body">
      <ul class="list-group list-group-flush" id="list-wrapper">
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item1"
            id="item1"
          />
          <label class="form-check-label" for="item1">
            Item 1
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item2"
            id="item2"
          />
          <label class="form-check-label" for="item2">
            Item 2
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item3"
            id="item3"
          />
          <label class="form-check-label" for="item3">
            Item 3
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item4"
            id="item4"
          />
          <label class="form-check-label" for="item4">
            Item 4
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item5"
            id="item5"
          />
          <label class="form-check-label" for="item5">
            Item 5
          </label>
        </li>
        <li class="list-group-item" id="selected-values"></li>
      </ul>
    </div>
  </div>
</div>

jQuery

  $(function() {
    // ID selector on Master Checkbox
    var masterCheck = $("#masterCheck");
    // ID selector on Items Container
    var listCheckItems = $("#list-wrapper :checkbox");

    // Click Event on Master Check
    masterCheck.on("click", function() {
      var isMasterChecked = $(this).is(":checked");
      listCheckItems.prop("checked", isMasterChecked);
      getSelectedItems();
    });

    // Change Event on each item checkbox
    listCheckItems.on("change", function() {
      // Total Checkboxes in list
      var totalItems = listCheckItems.length;
      // Total Checked Checkboxes in list
      var checkedItems = listCheckItems.filter(":checked").length;

      //If all are checked
      if (totalItems == checkedItems) {
        masterCheck.prop("indeterminate", false);
        masterCheck.prop("checked", true);
      }
      // Not all but only some are checked
      else if (checkedItems > 0 && checkedItems < totalItems) {
        masterCheck.prop("indeterminate", true);
      }
      //If none is checked
      else {
        masterCheck.prop("indeterminate", false);
        masterCheck.prop("checked", false);
      }
      getSelectedItems();
    });

    function getSelectedItems() {
      var getCheckedValues = [];
      getCheckedValues = [];
      listCheckItems.filter(":checked").each(function() {
        getCheckedValues.push($(this).val());
      });
      $("#selected-values").html(JSON.stringify(getCheckedValues));
    }
  });

2

Giải pháp tốt nhất tại đây Kiểm tra Fiddle

$("#checkAll").change(function () {
    $("input:checkbox.cb-element").prop('checked', $(this).prop("checked"));
});
$(".cb-element").change(function () {
        _tot = $(".cb-element").length                        
        _tot_checked = $(".cb-element:checked").length;

        if(_tot != _tot_checked){
            $("#checkAll").prop('checked',false);
        }
});
<input type="checkbox" id="checkAll"/> ALL

<br />

<input type="checkbox" class="cb-element" /> Checkbox  1
<input type="checkbox" class="cb-element" /> Checkbox  2
<input type="checkbox" class="cb-element" /> Checkbox  3

2

Mã bên dưới sẽ hoạt động nếu người dùng chọn tất cả các hộp kiểm, sau đó chọn tất cả hộp kiểm sẽ được chọn và nếu người dùng bỏ chọn bất kỳ hộp kiểm nào thì chọn tất cả hộp kiểm sẽ được bỏ chọn.

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

$(".cb-element").change(function () {
  if($(".cb-element").length==$(".cb-element:checked").length)
    $("#checkall").prop('checked', true);
  else
    $("#checkall").prop('checked', false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/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


1

thử cái này

$(".checkAll").click(function() {
    if("checkall" === $(this).val()) {
         $(".cb-element").attr('checked', true);
         $(this).val("uncheckall"); //change button text
    }
    else if("uncheckall" === $(this).val()) {
         $(".cb-element").attr('checked', false);
         $(this).val("checkall"); //change button text
    }
});

Tôi đã thử kịch bản của bạn, nhưng không có may mắn. Bạn có thể vui lòng xem điều này nếu tôi đã thực hiện đúng hay không ..? Bản demo
Ravi

1

Tự quảng cáo không biết xấu hổ: có một plugin jQuery cho điều đó .

HTML:

<form action="#" id="myform">
    <div><input type="checkbox" id="checkall"> <label for="checkall"> Check all</label></div>
    <fieldset id="slaves">
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
    </fieldset>
</form>

JS:

$('#checkall').checkAll('#slaves input:checkbox', {
    reportTo: function () {
        var prefix = this.prop('checked') ? 'un' : '';
        this.next().text(prefix + 'check all');
    }
});​

... và bạn đã hoàn thành.

http://jsfiddle.net/mattball/NrM2P


1

thử cái này,

<input type="checkbox" class="checkAll" onclick="$('input[type=checkbox][class=cb-element]').attr('checked',this.checked)">

1

Bạn có thể sử dụng this.checkedđể xác minh trạng thái hiện tại của hộp kiểm,

$('.checkAll').change(function(){
    var state = this.checked; //checked ? - true else false

    state ? $(':checkbox').prop('checked',true) : $(':checkbox').prop('checked',false);

    //change text
    state ? $(this).next('b').text('Uncheck All') : $(this).next('b').text('Check All')
});


1

Hãy thử mã bên dưới để kiểm tra / bỏ chọn tất cả các hộp kiểm

jQuery(document).ready(function() {
    $("#check_uncheck").change(function() {
        if ($("#check_uncheck:checked").length) {
            $(".checkboxes input:checkbox").prop("checked", true);
        } else {
            $(".checkboxes input:checkbox").prop("checked", false);
        }
    })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" name="check_uncheck" id="check_uncheck" /> Check All/Uncheck All
<br/>
<br/>
<div class="checkboxes">
    <input type="checkbox" name="check" id="check" /> Check Box 1
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 2
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 3
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 4
</div>

Hãy thử Liên kết demo này

Ngoài ra còn có một cách ngắn khác để làm điều này, kiểm tra ví dụ dưới đây. Trong ví dụ này, kiểm tra / bỏ chọn tất cả các hộp kiểm có được chọn hay không nếu được chọn thì tất cả wiil sẽ được kiểm tra và nếu không tất cả sẽ được bỏ chọn

$("#check_uncheck").change(function() {
    $(".checkboxes input:checkbox").prop("checked",$(this).is(':checked'));
})
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <input type="checkbox" name="check_uncheck" id="check_uncheck" /> Check All/Uncheck All
    <br/>
    <br/>
    <div class="checkboxes">
        <input type="checkbox" name="check" id="check" /> Check Box 1
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 2
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 3
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 4
    </div>


0

Tôi biết câu hỏi này đã cũ nhưng, tôi nhận thấy hầu hết mọi người đang sử dụng hộp kiểm. Câu trả lời được chấp nhận sử dụng một nút, nhưng không thể hoạt động với một số nút (ví dụ: một ở đầu trang một ở dưới cùng). Vì vậy, đây là một sửa đổi mà cả hai.

HTML

<a href="#" class="check-box-machine my-button-style">Check All</a>

jQuery

var ischecked = false;
$(".check-box-machine").click(function(e) {
    e.preventDefault();
    if (ischecked == false) {
        $("input:checkbox").attr("checked","checked");
        $(".check-box-machine").html("Uncheck All");
        ischecked = true;
    } else {
        $("input:checkbox").removeAttr("checked");
        $(".check-box-machine").html("Check All");
        ischecked = false;
    }
});

Điều này sẽ cho phép bạn có nhiều nút như bạn muốn với việc thay đổi giá trị văn bản và hộp kiểm. Tôi đã bao gồm một e.preventDefault()cuộc gọi vì điều này sẽ ngăn trang nhảy lên đầu do href="#"một phần.


0
$(function () {
    $('input#check_all').change(function () {
        $("input[name='input_ids[]']").prop('checked', $(this).prop("checked"));
    });
});

Bạn có thể vui lòng chỉnh sửa trong một giải thích tại sao mã này trả lời câu hỏi? Các câu trả lời chỉ có mã không được khuyến khích, vì chúng không dạy giải pháp.
Scimonster 9/2/2015


0
<script type="text/javascript">
    function myFunction(checked,total_boxes){ 
         for ( i=0 ; i < total_boxes ; i++ ){ 
           if (checked){   
             document.forms[0].checkBox[i].checked=true; 
            }else{  
             document.forms[0].checkBox[i].checked=false; 
            } 
        }   
    } 
</script>
    <body>
        <FORM> 
            <input type="checkbox" name="checkBox" >one<br> 
            <input type="checkbox" name="checkBox" >two<br> 
            <input type="checkbox" name="checkBox" >three<br> 
            <input type="checkbox" name="checkBox" >four<br> 
            <input type="checkbox" name="checkBox" >five<br> 
            <input type="checkbox" name="checkBox" >six<br> 
            <input type="checkbox" name="checkBox" >seven<br> 
            <input type="checkbox" name="checkBox" >eight<br> 
            <input type="checkbox" name="checkBox" >nine<br>
            <input type="checkbox" name="checkBox" >ten<br>  s
            <input type=button name="CheckAll" value="Select_All" onClick="myFunction(true,10)"> 
            <input type=button name="UnCheckAll" value="UnCheck All Boxes" onClick="myFunction(false,10)"> 
        </FORM> 
    </body>

0

thêm phần này vào khối mã của bạn hoặc thậm chí nhấp vào nút của bạn

$('input:checkbox').attr('checked',false);

0
$(document).ready( function() {
        // Check All
        $('.checkall').click(function () {          
            $(":checkbox").attr("checked", true);
        });
        // Uncheck All
        $('.uncheckall').click(function () {            
            $(":checkbox").attr("checked", false);
        });
    });

-1

Kiểm tra tất cả với bỏ chọn / kiểm tra bộ điều khiển nếu tất cả các mục là / không được kiểm tra

JS:

e = hộp kiểm id t = hộp kiểm (mục) lớp n = hộp kiểm kiểm tra tất cả các lớp

function checkAll(e,t,n){jQuery("#"+e).click(function(e){if(this.checked){jQuery("."+t).each(function(){this.checked=true;jQuery("."+n).each(function(){this.checked=true})})}else{jQuery("."+t).each(function(){this.checked=false;jQuery("."+n).each(function(){this.checked=false})})}});jQuery("."+t).click(function(e){var r=jQuery("."+t).length;var i=0;var s=0;jQuery("."+t).each(function(){if(this.checked==true){i++}if(this.checked==false){s++}});if(r==i){jQuery("."+n).each(function(){this.checked=true})}if(i<r){jQuery("."+n).each(function(){this.checked=false})}})}

HTML:

Kiểm tra TẤT CẢ lớp controle: chkall_ctrl

<input type="checkbox"name="chkall" id="chkall_up" class="chkall_ctrl"/>
<br/>
1.<input type="checkbox" value="1" class="chkall" name="chk[]" id="chk1"/><br/>
2.<input type="checkbox" value="2" class="chkall" name="chk[]" id="chk2"/><br/>
3.<input type="checkbox" value="3" class="chkall" name="chk[]" id="chk3"/><br/>
<br/>
<input type="checkbox"name="chkall" id="chkall_down" class="chkall_ctrl"/>

<script>
jQuery(document).ready(function($)
{
  checkAll('chkall_up','chkall','chkall_ctrl');
  checkAll('chkall_down','chkall','chkall_ctrl');
});
 </script>
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.