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!



Jawaban:


435

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

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

4
Dan menggunakan input [type = checkbox] adalah yang tercepat.
jClark

29

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


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.


7

Juga dapat dicapai dengan js murni sedemikian rupa:

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();

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 (,).

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

1

Untuk memilih oleh class, Anda dapat melakukan ini:

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.