tìm tất cả các hộp kiểm không được kiểm tra trong jquery


197

Tôi có một danh sách các hộp kiểm:

<input type="checkbox" name="answer" id="id_1' value="1" />
<input type="checkbox" name="answer" id="id_2' value="2" />
...
<input type="checkbox" name="answer" id="id_n' value="n" />

Tôi có thể thu thập tất cả các giá trị của các hộp kiểm tra; Câu hỏi của tôi là làm thế nào có thể nhận được tất cả các giá trị của các hộp kiểm không được kiểm tra? Tôi đã thử:

$("input:unchecked").val();

để có được giá trị của hộp kiểm không được kiểm tra, nhưng tôi đã nhận:

Lỗi cú pháp, biểu thức không được nhận dạng: không được kiểm tra.

bất cứ ai có thể làm sáng tỏ về vấn đề này? cảm ơn bạn!



Câu trả lời:


434

Như thông báo lỗi, jQuery không bao gồm :uncheckedbộ chọn.
Thay vào đó, bạn cần đảo ngược :checkedbộ chọn:

$("input:checkbox:not(:checked)")

4
Và sử dụng đầu vào [type = hộp kiểm] là nhanh nhất.
jClark 24/07/2015

29

$("input:checkbox:not(:checked)") Sẽ giúp bạn có được các hộp không được kiểm tra.


10

Bạn có thể làm như vậy bằng cách mở rộng chức năng jQuery. Điều này sẽ rút ngắn số lượng văn bản bạn phải viết cho bộ chọn.

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    }
);

Sau đó, bạn có thể sử dụng $("input:unchecked")để có được tất cả các hộp kiểm và các nút radio được chọn.


7

Ngoài ra nó có thể đạt được với js thuần theo cách như vậy:

var matches = document.querySelectorAll('input[type="checkbox"]:not(:checked)');

3
$("input[type='checkbox']:not(:checked):not('\#chkAll\')").map(function () { 
   var a = ""; 
   if (this.name != "chkAll") { 
      a = this.name + "|off"; 
   } 
   return a; 
}).get().join();

Điều này sẽ truy xuất tất cả các hộp kiểm không được kiểm tra và loại trừ hộp kiểm "chk ALL" mà tôi sử dụng để kiểm tra | bỏ chọn tất cả các hộp kiểm. Vì tôi muốn biết giá trị nào tôi chuyển đến cơ sở dữ liệu, tôi đặt các giá trị này thành tắt, vì các hộp kiểm cho tôi giá trị bật.

//looking for unchecked checkboxes, but don’t include the checkbox all that checks or unchecks all checkboxes
//.map - Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.

//.get - Retrieve the DOM elements matched by the jQuery object.
//.join - (javascript) joins the elements of an array into a string, and returns the string.The elements will be separated by a specified separator. The default separator is comma (,).

2
Bạn không nên bao gồm một cái gì đó trong câu trả lời của bạn hoàn toàn không liên quan đến OP. Anh ta không sử dụng một chkAllcái hộp để đề cập đến nó.
MMM

3

Bạn có thể sử dụng như thế này:

$(":checkbox:not(:checked)")

1

Để chọn theo class, bạn có thể làm điều này:

$("input.className:checkbox:not(:checked)")

0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });

1
Chào mừng bạn đến với StackOverflow! Vui lòng thêm một lời giải thích cho mã của bạn, để những người dùng khác (mà đây có thể là những gì họ đang tìm kiếm) biết mã của bạn làm gì.
Nander Speerstra
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.