Kiểm tra nếu tất cả các hộp kiểm được chọn


139

Làm cách nào để kiểm tra xem tất cả các hộp kiểm có class="abc"được chọn không?

Tôi cần kiểm tra nó mỗi khi một trong số chúng được kiểm tra hoặc bỏ chọn. Tôi có làm điều đó khi nhấp hoặc thay đổi không?

Câu trả lời:


256

Tôi nghĩ rằng cách dễ nhất là kiểm tra tình trạng này:

$('.abc:checked').length == $('.abc').length

Bạn có thể làm điều đó mỗi khi hộp kiểm mới được chọn:

$(".abc").change(function(){
    if ($('.abc:checked').length == $('.abc').length) {
       //do something
    }
});

2
lengthTôi nghĩ bạn không có ý gì ..size()
Jishnu AP

3
Cảm ơn @TheSuperTramp! Ý tôi là length, nhưng tôi không bao giờ thất bại trong việc quên nó là một tài sản và không phải là một phương pháp. Đã sửa
cbrandolino

97
$('input.abc').not(':checked').length > 0

2
Giải pháp hoàn hảo, sạch sẽ và thanh lịch. "if ($ ('input.abc'). not (": đã kiểm tra "). length) {...}" cũng hoạt động.
Skorunka František

1
Câu trả lời đó không đúng. Nó kiểm tra nếu có bất kỳ hộp kiểm tra nào. Nhưng câu hỏi là Kiểm tra nếu tất cả các hộp kiểm được chọn . Vì vậy, mã chính xác là : $('input.abc').not(':checked').length === 0.
hlcs

1
Câu trả lời này tốt hơn câu trả lời được chấp nhận nếu bạn xem xét hiệu suất. Điều này sẽ lặp lại chỉ một lần, thay vì hai lần.
Maarten Kieft

15

Bạn có thể dùng change()

$("input[type='checkbox'].abc").change(function(){
    var a = $("input[type='checkbox'].abc");
    if(a.length == a.filter(":checked").length){
        alert('all checked');
    }
});

Tất cả điều này sẽ làm là xác minh rằng tổng số .abchộp kiểm phù hợp với tổng số .abc:checked.

Mã ví dụ trên jsfiddle .


Không thực sự chắc chắn tại sao, nhưng a.length của tôi cho tôi giá trị là 8 trong khi tôi chỉ có 4 hộp kiểm.
santa

Đây filterlà một giải pháp tốt cho một nhóm các hộp kiểm, cảm ơn nhiều.
tổng thể


3

Phần 1 câu hỏi của bạn:

var allChecked = true;
$("input.abc").each(function(index, element){
  if(!element.checked){
    allChecked = false;
    return false;
  } 
});

BIÊN TẬP:

Câu trả lời (http://stackoverflow.com/questions/5541387/check-if-all-checkboxes-are-selected/5541480#5541480) ở trên có lẽ tốt hơn.


1

Các tiêu chí tìm kiếm là một trong những tiêu chí sau:

input[type=checkbox].MyClass:not(:checked)
input[type=checkbox].MyClass:checked

Bạn có thể muốn kết nối với sự kiện thay đổi.


1

Ngoài ra, bạn cũng có thể đã sử dụng mọi ():

// Cache DOM Lookup
var abc = $(".abc");

// On Click
abc.on("click",function(){

    // Check if all items in list are selected
    if(abc.toArray().every(areSelected)){
        //do something
    }

    function areSelected(element, index, array){
        return array[index].checked;
    }
});

1

Một giải pháp độc lập lớp

var checkBox = 'input[type="checkbox"]';
if ($(checkBox+':checked').length == $(checkBox).length) {
   //Do Something
}

1

Đây là cách tôi đạt được nó trong mã của mình:

if($('.citiescheckbox:checked').length == $('.citiescheckbox').length){
    $('.citycontainer').hide();
}else{
    $('.citycontainer').show();
}
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.