วิธีจัดการการเปลี่ยนแปลงช่องทำเครื่องหมายโดยใช้ jQuery


106

ฉันมีรหัสบางอย่าง

<input type="checkbox" id="chk" value="value" />
<label for="chk">Value </label>
<br/>
<input type="button" id="But1" value="set value" />
<br />
<input type="button" id="But2" value="read checked" />

จาวาสคริปต์:

$(document).ready(function () {
    console.log("Ready ...");
    registerHandlers();

    function registerHandlers() {
        $('#But1').click(function () {
            $('#chk').prop('checked', !$('#chk').is(':checked'));
        });
        $('#But2').click(function () {
            var chk1 = $('#chk').is(':checked');
            console.log("Value : " + chk1);
        });

        $('input[type="checkbox"]').change(function () {
            var name = $(this).val();
            var check = $(this).prop('checked');
            console.log("Change: " + name + " to " + check);
        });
    }
});

วิธีจัดการการเปลี่ยนแปลงช่องทำเครื่องหมายโดยใช้ jQuery ฉันต้องการให้ตัวจัดการเปลี่ยนช่องทำเครื่องหมายที่เลือกไว้

[อัปเดต]

มีช่องทำเครื่องหมายและปุ่มไม่กี่ปุ่ม แต่ละปุ่มสามารถเปลี่ยนกล่องกาเครื่องหมาย จะจับเหตุการณ์เปลี่ยนช่องทำเครื่องหมายได้อย่างไร?

[อัปเดต]

ฉันจำเป็นต้องจัดการกับการเปลี่ยนแปลงช่องทำเครื่องหมายในตัวอย่างนี้jsfiddle เมื่อฉันคลิกที่กล่องข้อความปุ่ม "ตกลง" จะไม่ปรากฏขึ้น


ฉันไม่เข้าใจปัญหาของคุณจริงๆเหรอ? จะเกิดอะไรขึ้นเมื่อมีการเปลี่ยนแปลงช่องทำเครื่องหมาย?
Niklas

มีปัญหาอะไร? รหัสนี้ดูเหมือนจะใช้งานได้ดี
JaredPar

2
คุณช่วยเรียบเรียงคำถามของคุณใหม่ได้ไหม คุณมี $ ('input [type = "checkbox"]') อยู่แล้วเปลี่ยน handler มีอะไรผิดปกติ?
Madman

หากคุณเปลี่ยนปุ่มช่องทำเครื่องหมายเหตุการณ์การเปลี่ยนแปลงจะไม่เกิดขึ้น
BILL

3
FYI; $('#chk').prop('checked')ส่งคืนบูลีนแทนที่จะเป็นค่าของแอตทริบิวต์ ดูapi.jquery.com/prop
Stefan

คำตอบ:


163

ใช้:checkboxตัวเลือก:

$(':checkbox').change(function() {

        // do stuff here. It will fire on any checkbox change

}); 

รหัส: http://jsfiddle.net/s6fe9/


75
... และthis.checkedมีประโยชน์มากในการตรวจสอบว่ามีการเลือกช่องทำเครื่องหมายหรือไม่
Stefan

1
เป็นไปได้ไหมที่จะลงทะเบียนเครื่องจัดการหลายเครื่อง
บิล

1
สิ่งนี้ยังคงแนะนำในปี 2015 หรือไม่
Eugen Sunic

2
ดูเหมือนว่า API จะไม่ได้รับการเปลี่ยนแปลงใช่แล้ว
Samich

สิ่งนี้ต้องอยู่ใน $ (document) พร้อม (function () ... สำหรับฉันถูกต้องหรือไม่
kaya

67

คุณสามารถใช้ Id ของฟิลด์ได้เช่นกัน

$('#checkbox1').change(function() {
   if($(this).is(":checked")) {
      //'checked' event code
      return;
   }
   //'unchecked' event code
});

17

หวังว่านี่จะช่วยได้บ้าง

$('input[type=checkbox]').change(function () {
    if ($(this).prop("checked")) {
        //do the stuff that you would do when 'checked'

        return;
    }
    //Here do the stuff you want to do when 'unchecked'
});

6
สำหรับ jQuery 1.6 ควรใช้ $ (this) .prop ("checked") ดีกว่าเนื่องจากจะเปลี่ยนแบบไดนามิกตามสถานะจริงของช่องทำเครื่องหมาย
hrabinowitz

3
.attr ("checked") ไม่ถูกต้องเนื่องจากไม่ได้รับการอัปเดตเมื่อผู้ใช้คลิก ฉันยืนยันความคิดเห็นของ @ hrabinowitz
Adrien

7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});

1
โปรดตรวจสอบโค้ดของคุณเองก่อนโพสต์ มีปัญหาที่ชัดเจนกับตัวเลือกของคุณ ...
โจนาธาน

live () เลิกใช้งานแล้ว
guettli

4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});

3
โปรดอธิบายคำตอบของคุณอย่างละเอียด: โซลูชันแบบใช้โค้ดเท่านั้นมีแนวโน้มที่จะถูกลบมากกว่าเนื่องจากไม่ได้อธิบายเพียงแค่แก้ไข (ถ้ามี)
rekaszeru

ขอโทษ @rekaszeru ฉันจะทำให้ดีขึ้นในครั้งต่อไป
Everton ZP

0

สำหรับฉันแล้วดูเหมือนว่า removeProp ทำงานไม่ถูกต้องใน Chrome: jsfiddle

        $('#badBut1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeProp('checked');
        }else{
            $('#chk').prop('checked', true);
        }
        checkit('After');
    });
    $('#But1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeClass('checked').prop('checked',false);
        }else{
            $('#chk').addClass('checked').prop('checked', true);
        }
        checkit('After');
    });

    $('#But2').click(function () {
        var chk1 = $('#chk').is(':checked');
        console.log("Value : " + chk1);
    });

    $('#chk').on( 'change',function () {
        checkit('Result');
    });
    function checkit(moment) {
        var chk1 = $('#chk').is(':checked');
        console.log(moment+", value = " + chk1);
    };

วิธีสลับช่องทำเครื่องหมายโดยไม่มีเหตุการณ์ (จากภายนอก): jsfiddle.net/k91k0sLu/1
laurent belloeil

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