รับค่าช่องทำเครื่องหมายใน jQuery


คำตอบ:


1060

ในการรับค่าของแอตทริบิวต์ค่าคุณสามารถทำสิ่งนี้:

$("input[type='checkbox']").val();

หรือถ้าคุณตั้งค่าไว้classหรือidคุณสามารถ:

$('#check_id').val();
$('.check_class').val();

อย่างไรก็ตามสิ่งนี้จะส่งกลับค่าเดียวกันไม่ว่าจะถูกตรวจสอบหรือไม่ซึ่งอาจทำให้สับสนเนื่องจากแตกต่างจากลักษณะการทำงานที่ส่งมา

หากต้องการตรวจสอบว่ามีการตรวจสอบหรือไม่ให้ทำ:

if ($('#check_id').is(":checked"))
{
  // it is checked
}

3
ตัวอย่างแรกทำอะไรถ้ามีช่องทำเครื่องหมายหลายช่องในหน้า Btw $("input:checkbox")ก็สามารถเขียนได้ในทางที่สั้นกว่า นอกจากนี้ดูเหมือนว่าจะมีการพิมพ์ผิดในตัวเลือกชั้น ...
Jawa

1
@Jawa: คนแรกเป็นเพียงตัวอย่างเพื่อแสดงไวยากรณ์และขอบคุณสำหรับการพิมพ์ผิดนั้น
Sarfraz

136
หากฉันลองใช้$($0).val()Chrome และยกเลิกการเลือกช่องทำเครื่องหมายคำตอบคือ "เปิด" แม้ว่าจะไม่ได้ถูกเลือก แต่$($0).is(":checked")คืนค่าที่ถูกต้อง
Adrien

2
@Jawa ต่อapi.jquery.com/checkbox-selector มีประสิทธิภาพที่ดีขึ้นในเบราว์เซอร์ที่ทันสมัยกว่า[type="checkbox"] :checkbox
TrueWill

3
แทนที่$('#check_id').val();เพื่อ$('#check_id').is(":checked");ส่งคืนค่าจริงหรือเท็จ
Matheus Miranda

227

ทั้งสองวิธีกำลังทำงาน:

  • $('#checkbox').prop('checked')
  • $('#checkbox').is(':checked')(ขอบคุณ@mgsloan)

$('#test').click(function() {
    alert("Checkbox state (method 1) = " + $('#test').prop('checked'));
    alert("Checkbox state (method 2) = " + $('#test').is(':checked'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Check me: <input id="test" type="checkbox" />



ขอบคุณสำหรับคำตอบ. นี่คือคำตอบที่ล้ำสมัยพร้อมฟังก์ชั่น jQuery prop ()
Thomas.Benz

58

ลองวิธีแก้ปัญหาเล็ก ๆ นี้:

$("#some_id").attr("checked") ? 1 : 0;

หรือ

$("#some_id").attr("checked") || 0;

หรือ !! ($ ("# some_id"). attr ("ตรวจสอบ"))
COOLGAMETUBE

34

วิธีที่ถูกต้องเพียงอย่างเดียวในการดึงค่าของช่องทำเครื่องหมายมีดังต่อไปนี้

if ( elem.checked ) 
if ( $( elem ).prop( "checked" ) ) 
if ( $( elem ).is( ":checked" ) ) 

ตามที่อธิบายไว้ในเอกสารอย่างเป็นทางการในเว็บไซต์ของ jQuery ส่วนที่เหลือของวิธีการไม่มีอะไรเกี่ยวข้องกับคุณสมบัติของช่องทำเครื่องหมายพวกเขากำลังตรวจสอบคุณสมบัติซึ่งหมายความว่าพวกเขากำลังทดสอบสถานะเริ่มต้นของช่องทำเครื่องหมายเมื่อมันถูกโหลด ดังนั้นในระยะสั้น:

  • เมื่อคุณมีองค์ประกอบและคุณรู้ว่ามันเป็นช่องทำเครื่องหมายคุณสามารถอ่านคุณสมบัติของมันและคุณไม่จำเป็นต้องมี jQuery สำหรับสิ่งนั้น (เช่นelem.checked) หรือคุณสามารถใช้$(elem).prop("checked")ถ้าคุณต้องการที่จะพึ่งพา jQuery
  • หากคุณจำเป็นต้องรู้ (หรือเปรียบเทียบ) มูลค่าเมื่อองค์ประกอบที่ถูกโหลดครั้งแรก (เช่นค่าเริ่มต้น) $(elem).is(":checked")วิธีที่ถูกต้องที่จะทำคือ

คำตอบมีการทำให้เข้าใจผิดโปรดตรวจสอบตัวเองด้านล่าง

http://api.jquery.com/prop/


.is(":checked")และ.prop(":checked")ทำงานเหมือนกันสำหรับฉันด้วย jQuery 1.10.0
Josh


14
$('#checkbox_id').val();
$('#checkbox_id').is(":checked");
$('#checkbox_id:checked').val();

ไม่ทำงาน, ไม่เป็นผล. คุณอาจต้องมีคอลัมน์ก่อนที่จะตรวจสอบ ': ตรวจสอบ'
ประโยชน์Bee

9
.val () ไม่ทำงาน ส่งคืน 'เปิด' โดยไม่คำนึงถึงการตรวจสอบ
Michael Cole

11
jQuery(".checkboxClass").click(function(){
        var selectedCountry = new Array();
        var n = jQuery(".checkboxClass:checked").length;
        if (n > 0){
            jQuery(".checkboxClass:checked").each(function(){
                selectedCountry.push($(this).val());
            });
        }
        alert(selectedCountry);
    });

10

เรียบง่าย แต่มีประสิทธิภาพและถือว่าคุณรู้ว่าจะพบช่องทำเครื่องหมาย:

$("#some_id")[0].checked;

ให้true/false


9
//By each()
var testval = [];
 $('.hobbies_class:checked').each(function() {
   testval.push($(this).val());
 });


//by map()
var testval = $('input:checkbox:checked.hobbies_class').map(function(){
return this.value; }).get().join(",");

 //HTML Code

 <input type="checkbox" value="cricket" name="hobbies[]"  class="hobbies_class">Cricket 
  <input type="checkbox" value="hockey" name="hobbies[]" class="hobbies_class">Hockey

ตัวอย่างการ
สาธิต


5

แม้ว่าที่จริงแล้วคำถามนี้จะขอวิธีการแก้ปัญหา jQuery ที่นี่เป็นคำตอบ JavaScript ที่บริสุทธิ์เพราะไม่มีใครพูดถึงมัน

ไม่มี jQuery:

เพียงเลือกองค์ประกอบและเข้าถึงcheckedคุณสมบัติ (ซึ่งจะส่งคืนบูลีน)

var checkbox = document.querySelector('input[type="checkbox"]');

alert(checkbox.checked);
<input type="checkbox"/>


นี่คือตัวอย่างการฟังchangeเหตุการณ์โดยย่อ:

var checkbox = document.querySelector('input[type="checkbox"]');
checkbox.addEventListener('change', function (e) {
    alert(this.checked);
});
<input type="checkbox"/>


ในการเลือกองค์ประกอบที่ตรวจสอบใช้:checkedคลาสหลอก ( input[type="checkbox"]:checked)

นี่คือตัวอย่างที่วนซ้ำinputองค์ประกอบที่ตรวจสอบและส่งคืนอาร์เรย์ที่แมปของชื่อองค์ประกอบที่ตรวจสอบ

ตัวอย่างที่นี่

var elements = document.querySelectorAll('input[type="checkbox"]:checked');
var checkedElements = Array.prototype.map.call(elements, function (el, i) {
    return el.name;
});

console.log(checkedElements);


1
สิ่งนี้ไม่ตอบคำถาม
Michael Cole

@MichaelCole - ฉันเพิ่งอ่านคำถามอีกครั้ง (3 ปีต่อมา) และดูเหมือนว่านี่จะตอบคำถามได้อย่างแท้จริงดังนั้นอย่าลังเลที่จะอธิบายอย่างละเอียด
Josh Crozier

1
"ฉันจะรับค่าช่องทำเครื่องหมายเป็น jQuery ได้อย่างไร" -> "แม้ว่าคำถามนี้จะขอวิธีแก้ปัญหา jQuery ... blah blah blah" มันเป็นกล่องคำตอบในรูปแบบของคำตอบจริงอื่น ๆ และนั่นเป็นสาเหตุที่ฉันลงมือทำ
Michael Cole

1
@MichaelCole - ยุติธรรมเพียงพอความคิดเห็นนั้นได้รับการชื่นชมเสมอ ความตั้งใจดั้งเดิมของคำตอบนี้คือเพื่อระบุว่า jQuery สามารถหลีกเลี่ยงได้ในกรณีที่ไม่สำคัญเช่นนี้เมื่อcheckedสามารถเข้าถึงคุณสมบัติได้ในองค์ประกอบ DOM ดั้งเดิม บางคนที่ค้นหาคำถาม / คำตอบเช่นนี้มักไม่รู้ตัวว่า jQuery ไม่จำเป็นในบางครั้ง กล่าวอีกนัยหนึ่งคนใจแคบไม่ใช่กลุ่มประชากรเป้าหมายสำหรับคำตอบนี้
Josh Crozier

2

นี่คือวิธีรับค่าของกล่องกาเครื่องหมายที่เลือกทั้งหมดเป็นอาร์เรย์:

var values = (function() {
                var a = [];
                $(".checkboxes:checked").each(function() {
                    a.push(this.value);
                });
                return a;
            })()

2

เพื่อรับค่า checkboxex ที่ถูกตรวจสอบในjquery:

var checks = $("input[type='checkbox']:checked"); // returns object of checkeds.

for(var i=0; i<checks.length; i++){
    console.log($(checks[i]).val()); // or do what you want
});

ในpure js:

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

for(var i=0; i<checks.length; i++){
    console.log(checks[i].value); // or do what you want
});



0

วิธีที่ดีที่สุดคือ $('input[name="line"]:checked').val()

และคุณยังสามารถเลือกข้อความ $('input[name="line"]:checked').text()

เพิ่มคุณสมบัติค่าและชื่อให้กับปุ่มตัวเลือกของคุณ ตรวจสอบให้แน่ใจว่าอินพุตทั้งหมดมีแอตทริบิวต์ชื่อเดียวกัน

<div class="col-8 m-radio-inline">
    <label class="m-radio m-radio-filter">
        <input type="radio" name="line" value="1" checked> Value Text 1
    </label>
    <label class="m-radio m-radio-filter">
        <input type="radio" name="line" value="2"> Value Text 2
    </label>
    <label class="m-radio m-radio-filter">
        <input type="radio" name="line" value="3"> Value Text 3
    </label>
</div>

-1
<script type="text/javascript">
$(document).ready(function(){
    $('.laravel').click(function(){
        var val = $(this).is(":checked");
        $('#category').submit();
    });
});

<form action="{{route('directory')}}" method="post" id="category">
                        <input type="hidden" name="_token" value="{{ csrf_token() }}">
                        <input name="category" value="{{$name->id}}"  class="laravel" type="checkbox">{{$name->name}}
                      </form>

-1

เพียงแค่ความสนใจ ณ วันนี้ปี 2018 เนื่องจากการเปลี่ยนแปลง API ในช่วงหลายปีที่ผ่านมา removeAttr ไม่ได้ทำงานอีกต่อไป!

ตรวจสอบ Jquery หรือยกเลิกการทำเครื่องหมายที่ช่องทำเครื่องหมาย:

ไม่ดีไม่ทำงานอีกต่อไป

   $('#add_user_certificate_checkbox').removeAttr("checked");

   $('#add_user_certificate_checkbox').attr("checked","checked");

แต่คุณควรทำ:

      $('#add_user_certificate_checkbox').prop('checked', true);
      $('#add_user_certificate_checkbox').prop('checked', false);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.