Kiểm tra / Bỏ chọn hộp kiểm với JavaScript (jQuery hoặc vanilla)?


Câu trả lời:


974

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

Sử dụng .prop dường như không hoạt động với Jquery 1.11.2 trong Firefox với các tệp được lưu trữ cục bộ. .attr nào. Tôi đã không kiểm tra đầy đủ hơn. Đây là mã: `` `personContent.find (" [data-name = '"+ pass.name +"'] "). Children ('input'). Attr ('đã kiểm tra', true); `` `
Andrew Downes

3
Chúng ta nên sử dụng attrhay prop?
Đen

15
Rõ ràng .checked = true/falsekhông kích hoạt changesự kiện này: - \

1
@albert: tại sao bạn thay đổi bài tập để kiểm tra bình đẳng nghiêm ngặt? Bạn đã phá vỡ câu trả lời.
Martijn Pieters

bạn đúng rồi. đó là điều xấu hoàn toàn của tôi xin lỗi về điều đó
albert

136

Hành vi quan trọng chưa được đề cập:

Lập trình thiết lập thuộc tính được kiểm tra , không kích hoạt changesự kiện của hộp kiểm .

Xem cho chính mình trong fiddle này:
http://jsfiddle.net/fjaeger/L9z9t04p/4/

(Fiddle đã thử nghiệm trong Chrome 46, Firefox 41 và IE 11)

các click()phương pháp

Một ngày nào đó bạn có thể thấy mình viết mã, dựa trên sự kiện bị sa thải. Để đảm bảo sự kiện kích hoạt, hãy gọi click()phương thức của phần tử hộp kiểm, như sau:

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

Tuy nhiên, điều này bật tắt trạng thái đã chọn của hộp kiểm, thay vì đặt cụ thể thành truehoặc false. Hãy nhớ rằng changesự kiện chỉ nên kích hoạt, khi thuộc tính được kiểm tra thực sự thay đổi.

Nó cũng áp dụng cho cách jQuery: thiết lập thuộc tính bằng cách sử dụng prophoặc attrkhông kích hoạt changesự kiện.

Đặt checkedthành một giá trị cụ thể

Bạn có thể kiểm tra checkedthuộc tính, trước khi gọi click()phương thức. Thí dụ:

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

Đọc thêm về phương pháp nhấp tại đây:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLEuity/click


8
Đó là một câu trả lời hay nhưng cá nhân tôi thích kích hoạt sự kiện thay đổi thay vì gọi click () elm.dispatchEvent(new Event('change'));
Victor Sharovatov

@VictorSharovatov Tại sao bạn muốn kích hoạt sự kiện thay đổi?
PeterCo

2
Tôi chỉ có thể đồng ý một phần - nhiều trình duyệt web có AdBlocks đang bảo vệ DOM khỏi nhấp chuột ảo () do các hành động không mong muốn từ quảng cáo
pkolawa

2
@PeterCo: Có lẽ vì nó thể hiện rõ hơn ý định - nhấp vào yếu tố để kích hoạt sự kiện thay đổi so với việc gửi sự kiện thay đổi để thực hiện sự kiện thay đổi - gián tiếp (kích hoạt thay đổi) so với trực tiếp. Cái sau rõ ràng hơn đáng kể và không yêu cầu người đọc biết rằng một nhấp chuột tạo ra sự thay đổi.
Bill Dagg

37

để kiểm tra:

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

để bỏ chọn:

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

2
Điều đó sẽ chỉ thay đổi thuộc tính được kiểm tra. Tuy nhiên, onclick và các sự kiện tương tự sẽ không được kích hoạt.
Paul Stelian

16

Chúng tôi có thể kiểm tra một hộp kiểm tra hạt như,

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

và bỏ chọn bởi,

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

1
Bạn thực sự không cần chỉ số mảng nếu bạn chỉ chọn một yếu tố. Nhưng tôi đoán nếu bạn muốn được rõ ràng. haha
Rizowski

6
@Rizowski Bạn cần chỉ mục để lấy phần tử html gốc - Các đối tượng jQuery không có thuộc tính "đã kiểm tra"
Henrik Christensen

Điều này đã làm việc cho tôi. Không có chỉ số mảng, tôi đã nhận được lỗi không xác định. Cảm ơn rất nhiều, đã cứu ngày của tôi.
Neri

15

Tôi muốn lưu ý rằng việc đặt thuộc tính 'được kiểm tra' thành một chuỗi không trống dẫn đến một hộp được chọn.

Vì vậy, nếu bạn đặt thuộc tính 'được kiểm tra' thành "sai" , hộp kiểm sẽ được chọn. Tôi đã phải đặt giá trị thành chuỗi rỗng, null hoặc giá trị boolean sai để đảm bảo hộp kiểm không được chọn.


5
Điều này là do một chuỗi không trống được coi là trung thực.
James Coyle

10

Thử cái này:

//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');

//UnCheck
document.getElementById('chk').removeAttribute('checked');

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>

6
function setCheckboxValue(checkbox,value) {
    if (checkbox.checked!=value)
        checkbox.click();
}

3

Nếu, vì một số lý do, bạn không muốn (hoặc không thể) chạy .click()phần tử hộp kiểm, bạn chỉ cần thay đổi trực tiếp giá trị của nó thông qua thuộc tính .checked ( thuộc tính IDL của nó <input type="checkbox">).

Lưu ý rằng làm như vậy không kích hoạt sự kiện ( thay đổi ) thông thường, vì vậy bạn sẽ cần phải kích hoạt thủ công để có giải pháp hoàn chỉnh hoạt động với bất kỳ trình xử lý sự kiện liên quan nào.

Đây là một ví dụ chức năng trong javascript thô (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>

Nếu bạn chạy nó và nhấp vào cả hộp kiểm và nút, bạn sẽ hiểu được cách thức hoạt động của nó.

Lưu ý rằng tôi đã sử dụng document.querySelector để đơn giản / đơn giản, nhưng điều này có thể dễ dàng được xây dựng để có một ID nhất định được chuyển đến hàm tạo hoặc nó có thể áp dụng cho tất cả các nút đóng vai trò là nhãn aria cho hộp kiểm (lưu ý rằng tôi đã không bận tâm đến việc đặt id trên nút và đặt hộp kiểm một aria-labellingby, điều này nên được thực hiện nếu sử dụng phương pháp này) hoặc bất kỳ cách nào khác để mở rộng điều này. Hai addEventListenergiây cuối chỉ là để giới thiệu cách nó hoạt động.


2

Để kiểm tra một lần

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

cho nhiều thử


2

Tôi đồng ý với các câu trả lời hiện tại, nhưng trong trường hợp của tôi nó không hoạt động, tôi hy vọng mã này sẽ giúp được ai đó trong tương lai:

// check
$('#checkbox_id').click()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.