ค้นหาช่องทำเครื่องหมายไม่ถูกตรวจสอบทั้งหมดใน jquery


197

ฉันมีรายการช่องทำเครื่องหมาย:

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

ฉันสามารถรวบรวมค่าทั้งหมดของช่องทำเครื่องหมายที่เลือก คำถามของฉันคือฉันจะได้รับค่าทั้งหมดของช่องทำเครื่องหมายไม่ได้ทำเครื่องหมาย? ฉันเหนื่อย:

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

เพื่อรับค่าช่องทำเครื่องหมายไม่ถูกตรวจสอบ แต่ฉันได้:

ข้อผิดพลาดทางไวยากรณ์นิพจน์ที่ไม่รู้จัก: ไม่ถูกตรวจสอบ

ใครสามารถทำให้กระจ่างเกี่ยวกับปัญหานี้? ขอบคุณ!



คำตอบ:


434

ในขณะที่ข้อความแสดงข้อผิดพลาด jQuery ไม่รวม:uncheckedตัวเลือก
คุณต้องสลับกลับ:checkedตัวเลือกแทน:

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

4
และการใช้อินพุต [type = ช่องทำเครื่องหมาย] นั้นเร็วที่สุด
jClark


10

คุณสามารถทำได้โดยการขยายฟังก์ชั่น jQuerys นี่จะทำให้จำนวนข้อความที่คุณต้องเขียนให้สั้นลง

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

จากนั้นคุณสามารถใช้$("input:unchecked")เพื่อรับช่องทำเครื่องหมายและปุ่มตัวเลือกทั้งหมดที่ทำเครื่องหมายไว้


7

นอกจากนี้ยังสามารถทำได้ด้วย js บริสุทธิ์ในลักษณะ:

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

การดำเนินการนี้จะดึงช่องทำเครื่องหมายที่ไม่ได้ทำเครื่องหมายทั้งหมดและไม่รวมช่องทำเครื่องหมาย "chkAll" ที่ฉันใช้ในการทำเครื่องหมาย | ยกเลิกการทำเครื่องหมายที่ช่องทำเครื่องหมายทั้งหมด เนื่องจากฉันต้องการทราบว่าฉันส่งผ่านค่าใดไปยังฐานข้อมูลที่ฉันตั้งค่าเหล่านี้ไว้เนื่องจากช่องทำเครื่องหมายให้ฉันมูลค่า

//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
คุณไม่ควรรวมบางสิ่งในคำตอบของคุณซึ่งไม่เกี่ยวข้องกับ OP อย่างสมบูรณ์ เขาไม่ได้ใช้chkAllกล่องดังนั้นสิ่งที่เป็นจุดพูดถึงมัน
MMM



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

1
ยินดีต้อนรับสู่ StackOverflow! โปรดเพิ่มคำอธิบายลงในรหัสของคุณเพื่อให้ผู้ใช้รายอื่น (ซึ่งอาจเป็นสิ่งที่พวกเขากำลังมองหา) รู้ว่ารหัสของคุณทำอะไร
Nander Speerstra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.