ทำเครื่องหมาย / ไม่เลือกช่องทำเครื่องหมายด้วย JavaScript (jQuery หรือวานิลลา)?


คำตอบ:


975

javascript:

// Check
document.getElementById("checkbox").checked = true;

// Uncheck
document.getElementById("checkbox").checked = false;

jQuery (1.6+):

// Check
$("#checkbox").prop("checked", true);

// Uncheck
$("#checkbox").prop("checked", false);

jQuery (1.5-):

// Check
$("#checkbox").attr("checked", true);

// Uncheck
$("#checkbox").attr("checked", false);

ดูเหมือนว่าการใช้ .prop จะไม่ทำงานกับ Jquery 1.11.2 ใน Firefox ที่มีไฟล์โฮสต์อยู่ .attr ทำ ฉันไม่ได้ทดสอบอย่างเต็มที่ นี่คือรหัส: `` `personContent.find (" [data-name = '"+ pass.name +"'] ")) children ('input'). attr ('ตรวจสอบ', จริง); `` `
แอนดรูว์ Downes

3
เราควรจะใช้attrหรือprop?
Black

15
เห็นได้ชัดว่า.checked = true/falseไม่ก่อให้เกิดchangeเหตุการณ์: - \
leaf

1
@albert: ทำไมคุณถึงเปลี่ยนงานการทดสอบความเท่าเทียมอย่างเข้มงวด? คุณทำลายคำตอบ
Martijn Pieters

คุณพูดถูก นั่นคือสิ่งที่ไม่ดีของฉันอย่างสิ้นเชิง ขอโทษด้วย
อัลเบิร์ต

136

พฤติกรรมที่สำคัญที่ยังไม่ได้กล่าวถึง:

โปรแกรมการตั้งค่าการตรวจสอบคุณลักษณะที่ไม่ได้ยิงchangeกรณีของช่อง

ดูตัวเองในซอนี้:
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(ซอได้ทดสอบกับ Chrome 46, Firefox 41 และ IE 11)

click()วิธี

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

document.getElementById('checkbox').click();

แต่นี้สลับสถานะการตรวจสอบของช่องแทนการตั้งค่าเฉพาะมันหรือtrue falseโปรดจำไว้ว่าchangeเหตุการณ์ควรเริ่มทำงานเมื่อแอตทริบิวต์ที่ตรวจสอบเปลี่ยนไปจริง ๆ เท่านั้น

นอกจากนี้ยังนำไปใช้กับวิธี jQuery: การตั้งค่าคุณลักษณะโดยใช้propหรือattrไม่ดำเนินการchangeเหตุการณ์

การตั้งค่าcheckedเป็นค่าเฉพาะ

คุณสามารถทดสอบcheckedคุณสมบัติก่อนที่จะเรียกclick()วิธีการ ตัวอย่าง:

function toggle(checked) {
  var elm = document.getElementById('checkbox');
  if (checked != elm.checked) {
    elm.click();
  }
}

อ่านเพิ่มเติมเกี่ยวกับวิธีการคลิกที่นี่:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


8
นั่นเป็นคำตอบที่ดี แต่โดยส่วนตัวแล้วฉันต้องการใช้เหตุการณ์การเปลี่ยนแปลงแทนการคลิก () elm.dispatchEvent(new Event('change'));
Victor Sharovatov

@VictorSharovatov เหตุใดคุณจึงต้องการเริ่มต้นเหตุการณ์การเปลี่ยนแปลง
PeterCo

2
ฉันเห็นด้วยเพียงบางส่วนเท่านั้น - เว็บเบราว์เซอร์จำนวนมากที่มี AdBlocks กำลังปกป้อง DOM จากการคลิกเสมือน () เนื่องจากการกระทำที่ไม่พึงประสงค์จากโฆษณา
pkolawa

2
@PeterCo: อาจเป็นเพราะมันแสดงให้เห็นชัดเจนกว่าเจตนา - คลิกที่องค์ประกอบเพื่อเริ่มเหตุการณ์การเปลี่ยนแปลงเมื่อเทียบกับการส่งเหตุการณ์การเปลี่ยนแปลงเพื่อเริ่มเหตุการณ์การเปลี่ยนแปลง - ทางอ้อม (คลิกเรียกการเปลี่ยนแปลง) เมื่อเทียบกับโดยตรง หลังมีความชัดเจนมากและไม่ต้องการให้ผู้อ่านรู้ว่าการคลิกทำให้เกิดการเปลี่ยนแปลง
Bill Dagg

37

เพื่อตรวจสอบ:

document.getElementById("id-of-checkbox").checked = true;

เพื่อยกเลิกการเลือก:

document.getElementById("id-of-checkbox").checked = false;

2
นั่นจะเปลี่ยนแอตทริบิวต์ที่ตรวจสอบแล้วเท่านั้น อย่างไรก็ตามเหตุการณ์ onclick และเหตุการณ์ที่คล้ายกันจะไม่ถูกเรียกใช้
Paul Stelian

16

เราสามารถตรวจสอบช่องทำเครื่องหมายอนุภาคเป็น

$('id of the checkbox')[0].checked = true

และยกเลิกการเลือกโดย

$('id of the checkbox')[0].checked = false

1
คุณไม่จำเป็นต้องมีดัชนีอาร์เรย์ถ้าคุณเลือกเพียงองค์ประกอบเดียว แต่ฉันเดาว่าถ้าคุณต้องการที่จะชัดเจน ฮ่าฮ่า
Rizowski

6
@Rizowski คุณจำเป็นต้องมีดัชนีเพื่อรับองค์ประกอบ html แบบดั้งเดิม - วัตถุ jQuery ไม่มีคุณสมบัติ "ที่ตรวจสอบแล้ว"
Henrik Christensen

สิ่งนี้ได้ผลสำหรับฉัน หากไม่มีดัชนีอาร์เรย์ฉันได้รับข้อผิดพลาดที่ไม่ได้กำหนด ขอบคุณมากบันทึกวันของฉันไว้
Neri

15

ฉันต้องการทราบว่าการตั้งค่าแอตทริบิวต์ 'ที่ตรวจสอบแล้ว' เป็นสตริงที่ไม่ว่างจะนำไปสู่กล่องที่ทำเครื่องหมายไว้

ดังนั้นหากคุณตั้งค่าแอตทริบิวต์ 'ที่ตรวจสอบแล้ว' เป็น"เท็จ"ช่องทำเครื่องหมายจะถูกตรวจสอบ ฉันต้องตั้งค่าเป็นสตริงว่างเปล่า, โมฆะหรือค่าบูลีนเป็นเท็จเพื่อให้แน่ใจว่าไม่ได้เลือกช่องทำเครื่องหมาย


5
นี่เป็นเพราะสตริงที่ไม่ว่างถือเป็นความจริง
James Coyle


6
<script type="text/javascript">
    $(document).ready(function () {
        $('.selecctall').click(function (event) {
            if (this.checked) {
                $('.checkbox1').each(function () {
                    this.checked = true;
                });
            } else {
                $('.checkbox1').each(function () {
                    this.checked = false;
                });
            }
        });

    });

</script>


3

หากด้วยเหตุผลบางอย่างคุณไม่ต้องการ (หรือไม่สามารถ) เรียกใช้งาน.click()บนองค์ประกอบช่องทำเครื่องหมายคุณสามารถเปลี่ยนค่าได้โดยตรงผ่านทางคุณสมบัติ. checked (คุณสมบัติIDLของ<input type="checkbox">)

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

นี่คือตัวอย่างการทำงานใน raw javascript (ES6):

class ButtonCheck {
  constructor() {
    let ourCheckBox = null;
    this.ourCheckBox = document.querySelector('#checkboxID');

    let checkBoxButton = null;
    this.checkBoxButton = document.querySelector('#checkboxID+button[aria-label="checkboxID"]');

    let checkEvent = new Event('change');
    
    this.checkBoxButton.addEventListener('click', function() {
      let checkBox = this.ourCheckBox;

      //toggle the checkbox: invert its state!
      checkBox.checked = !checkBox.checked;

      //let other things know the checkbox changed
      checkBox.dispatchEvent(checkEvent);
    }.bind(this), true);

    this.eventHandler = function(e) {
      document.querySelector('.checkboxfeedback').insertAdjacentHTML('beforeend', '<br />Event occurred on checkbox! Type: ' + e.type + ' checkbox state now: ' + this.ourCheckBox.checked);

    }


    //demonstration: we will see change events regardless of whether the checkbox is clicked or the button

    this.ourCheckBox.addEventListener('change', function(e) {
      this.eventHandler(e);
    }.bind(this), true);

    //demonstration: if we bind a click handler only to the checkbox, we only see clicks from the checkbox

    this.ourCheckBox.addEventListener('click', function(e) {
      this.eventHandler(e);
    }.bind(this), true);


  }
}

var init = function() {
  const checkIt = new ButtonCheck();
}

if (document.readyState != 'loading') {
  init;
} else {
  document.addEventListener('DOMContentLoaded', init);
}
<input type="checkbox" id="checkboxID" />

<button aria-label="checkboxID">Change the checkbox!</button>

<div class="checkboxfeedback">No changes yet!</div>

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

โปรดทราบว่าฉันใช้ document.querySelector เพื่อความกะทัดรัด / ความเรียบง่าย แต่สิ่งนี้สามารถสร้างขึ้นได้อย่างง่ายดายเพื่อให้มี ID ที่กำหนดส่งผ่านไปยังตัวสร้างหรืออาจใช้กับปุ่มทั้งหมดที่ทำหน้าที่เป็นป้ายกำกับอาเรียสำหรับกล่องกาเครื่องหมาย (โปรดทราบว่า ไม่ได้ยุ่งเกี่ยวกับการตั้งรหัสบนปุ่มและให้กล่องกาเครื่องหมายเป็น aria-labelledby ซึ่งควรทำถ้าใช้วิธีนี้) หรือวิธีอื่น ๆ เพื่อขยาย สองคนสุดท้ายaddEventListenerเป็นเพียงการสาธิตวิธีการทำงาน


2

ลองตรวจสอบครั้งเดียว

myCheckBox.checked=1
<input type="checkbox" id="myCheckBox"> Call to her

สำหรับลองหลาย


2

ฉันเห็นด้วยกับคำตอบปัจจุบัน แต่ในกรณีของฉันมันไม่ทำงานฉันหวังว่ารหัสนี้จะช่วยคนในอนาคต:

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