jQuery xem nếu có hoặc không có hộp kiểm nào được chọn


126

Tôi biết làm thế nào để xem nếu một hộp kiểm tra cá nhân được chọn hay không.

Nhưng tôi gặp rắc rối với những điều sau đây - được cung cấp một id mẫu tôi cần xem liệu có bất kỳ hộp kiểm nào được chọn không (tức là 1 hoặc nhiều hơn) và tôi cần xem được chọn không. Về cơ bản tôi cần hai chức năng riêng biệt trả lời hai câu hỏi này. Trợ giúp sẽ được đánh giá cao. Cảm ơn!

Trên thực tế, tôi sẽ chỉ cần một chức năng để cho tôi biết nếu không được chọn. Biết điều này sẽ trả lời câu hỏi khác.


Câu trả lời:


246

Bạn có thể sử dụng một cái gì đó như thế này

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}

8
$("#formID input:checkbox:checked").lengthcũng sẽ đủ ở đây
Damon

@Damon Tôi đoán bạn có nghĩa là if ($("#formID input:checkbox:checked").length){}(không có >0) sẽ là đủ vì 0 là giá trị falsey, xem james.padolsey.com/javascript/truthy-falsey
Adrien Be

11
jQuery nói về :checkboxbộ chọn : For better performance in modern browsers, use [type="checkbox"], xem api.jquery.com/checkbox-selector - tương tự cho radiobuttons btw, use [type="radio"] rather than :radio api.jquery.com/radio-selector
Adrien Be

27

JQuery .issẽ kiểm tra tất cả các phần tử đã chỉ định và trả về true nếu ít nhất một trong số chúng khớp với bộ chọn:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}

Mặc dù is()dường như hoạt động, có :checkedtrực tiếp trong bộ chọn như được chỉ ra trong câu trả lời của @ rahul có vẻ phù hợp hơn. là () có vẻ hữu ích hơn khi "bên trong các cuộc gọi lại", xem api.jquery.com/is . Hay tôi đang thiếu một cái gì đó?
Adrien Be

Không, đó là khá nhiều những gì được viết trong tài liệu - bạn kiểm tra xem một phần tử có khớp với thuộc tính được chỉ định không. Áp dụng nó dưới dạng bộ lọc và sau đó kiểm tra xem bạn có nhận được ít nhất một mục không giống nhau nhưng imo lâu hơn và không quá biểu cảm.
Michael Logutov

+1 cho thực tế là .is(":checked")trong giải pháp của bạn có ý nghĩa hơn, mặc dù không chắc chắn về phần còn lại.
Adrien Be

Cụ thể $("form input[type=checkbox]").is(":checked")có thể là một cách tiếp cận đơn giản và chung chung hơn.
Adrien Be

@AdrienBe Sử dụng iscó thể có hiệu suất tốt hơn, vì nó dừng ngay khi tìm thấy.
ChrisW

8

Bạn có thể làm được việc này:

  if ($('#form_id :checkbox:checked').length > 0){
    // one or more checkboxes are checked
  }
  else{
   // no checkboxes are checked
  }

Ở đâu:

  • :checkbox bộ lọc chọn tất cả các hộp kiểm.
  • :checked sẽ chọn các hộp kiểm tra
  • length sẽ đưa ra số lượng những người được kiểm tra ở đó

jQuery nói về :checkboxbộ chọn : For better performance in modern browsers, use [type="checkbox"], xem api.jquery.com/checkbox-selector
Adrien Be

6

Đây là những gì tôi đã sử dụng để kiểm tra nếu có bất kỳ hộp kiểm nào trong danh sách các hộp kiểm đã thay đổi:

$('input[type="checkbox"]').change(function(){ 

        var itemName = $('select option:selected').text();  

         //Do something.

});     

6

Không cần sử dụng 'độ dài', bạn có thể làm như thế này:

if ($('input[type=checkbox]').is(":checked")) {
      //any one is checked
}
else {
//none is checked
}

3

Bạn có thể thực hiện một sự trở lại đơn giản của .lengthđây:

function areAnyChecked(formID) {
  return !!$('#'+formID+' input[type=checkbox]:checked').length;
}

Cái này tìm kiếm các hộp kiểm trong biểu mẫu đã cho, xem nếu có :checkedvà trả về truenếu có (vì độ dài sẽ là 0 nếu không). Để làm cho nó rõ ràng hơn một chút, đây là phiên bản không chuyển đổi boolean:

function howManyAreChecked(formID) {
  return $('#'+formID+' input[type=checkbox]:checked').length;
}

Điều này sẽ trả về số lượng đã được kiểm tra.


3

Câu trả lời của Rahul là phù hợp nhất cho câu hỏi của bạn. Dù sao, nếu bạn có một nhóm các hộp kiểm tra và không phải tất cả các hộp kiểm trong biểu mẫu của bạn, bạn có thể đi tìm nó.

Đặt tên lớp cho tất cả các hộp kiểm bạn muốn kiểm tra, ví dụ như tên lớp test_checkvà bây giờ bạn có thể kiểm tra xem có bất kỳ hộp kiểm nào được chọn thuộc về nhóm không:

$("#formID .test_check:checked").length > 0

Nếu nó trả về true, giả sử rằng một hoặc nhiều hộp kiểm tra được chọn có tên lớp test_checkvà không được chọn nếu trả về false.

Hy vọng nó sẽ giúp được ai đó. Cảm ơn :)-


1

Đây là cách tốt nhất để giải quyết vấn đề này.

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };

Chào mừng bạn đến với StackOverflow. Có lẽ bạn có thể mô tả câu trả lời của mình nhiều hơn một chút, vì không rõ tại sao đó là "cách tốt nhất" để giải quyết vấn đề.
dddJewelsbbb
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.