temukan semua kotak centang yang tidak dicentang di jquery

197

Saya memiliki daftar kotak centang:

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

Saya bisa mengumpulkan semua nilai kotak centang yang dicentang; pertanyaan saya adalah bagaimana bisa mendapatkan semua nilai kotak centang yang tidak dicentang? Saya mencoba:

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

untuk mendapatkan nilai kotak centang yang tidak dicentang, tetapi saya mendapat:

Kesalahan sintaksis, ekspresi yang tidak dikenal: tidak dicentang.

adakah yang bisa menjelaskan masalah ini? Terima kasih!

Gary
sumber

Jawaban:

435

Saat pesan kesalahan menyatakan, jQuery tidak menyertakan :uncheckedpemilih.
Alih-alih, Anda harus membalik :checkedpemilih:

$("input:checkbox:not(:checked)")
Slaks
sumber
4
Dan menggunakan input [type = checkbox] adalah yang tercepat.
jClark
29

$("input:checkbox:not(:checked)") Akan memberimu kotak yang tidak dicentang.

dave
sumber
10

Anda dapat melakukannya dengan memperluas fungsionalitas jQuerys. Ini akan mempersingkat jumlah teks yang harus Anda tulis untuk pemilih.

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

Anda kemudian dapat menggunakan $("input:unchecked")untuk mendapatkan semua kotak centang dan tombol radio yang dicentang.

Thulasiram
sumber
7

Juga dapat dicapai dengan js murni sedemikian rupa:

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

Ini akan mengambil semua kotak centang yang tidak dicentang dan mengecualikan kotak centang "chkAll" yang saya gunakan untuk mencentang | hapus centang semua kotak centang. Karena saya ingin tahu nilai apa yang saya sampaikan ke database, saya mematikannya, karena kotak centang memberi saya nilai aktif.

//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 (,).
cdub
sumber
2
Anda seharusnya tidak memasukkan sesuatu dalam jawaban Anda yang sama sekali tidak relevan untuk OP. Dia tidak menggunakan chkAllkotak jadi apa gunanya menyebutkannya.
MMM
3

Anda bisa menggunakan seperti ini:

$(":checkbox:not(:checked)")
Ehsan
sumber
1

Untuk memilih oleh class, Anda dapat melakukan ini:

$("input.className:checkbox:not(:checked)")
Chukwuemeka Inya
sumber
0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });
UTHIRASAMY
sumber
1
Selamat datang di StackOverflow! Harap tambahkan penjelasan ke kode Anda, sehingga pengguna lain (untuk siapa ini yang mereka cari) tahu apa yang kode Anda lakukan.
Nander Speerstra