使用JavaScript(jQuery或Vanilla)选中/取消选中复选框?


Answers:


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

在本地托管文件的Firefox中,使用.prop似乎不适用于Jquery 1.11.2。.attr。我还没有进行更全面的测试。这里是代码:```personContent.find(“ [data-name ='” + pass.name +“']”)。children('input')。attr('checked',true); ```
Andrew Downes 2015年

3
我们应该使用attr还是prop
黑色

15
显然.checked = true/false不会触发change\ - :事件

1
@albert:为什么将作业更改为严格的相等性测试?你打破了答案。
马丁·彼得斯

你是对的。那完全是我的坏事。对此感到抱歉
艾伯特

136

尚未提及的重要行为:

以编程方式设置checked属性,不会触发changecheckbox 的事件

自己看看这个小提琴:http :
//jsfiddle.net/fjaeger/L9z9t04p/4/

(Fiddle已在Chrome 46,Firefox 41和IE 11中进行了测试)

click()方法

有一天,您可能会发现自己在编写代码,这取决于被触发的事件。为确保触发事件,请调用click()checkbox元素的方法,如下所示:

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

但是,这将切换复选框的选中状态,而不是将其专门设置为truefalse。请记住,change仅当checked属性实际更改时,才应触发该事件。

这也适用于jQuery方式:使用prop或设置属性attr不会触发change事件。

设置checked为特定值

您可以checked在调用click()方法之前测试属性。例:

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

在此处阅读有关click方法的更多信息:https :
//developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


8
这是一个很好的答案,但就我个人而言,我希望触发更改事件,而不是调用click() elm.dispatchEvent(new Event('change'));
Victor Sharovatov

@VictorSharovatov为什么您想触发更改事件?
PeterCo '16

2
我只能部分同意-由于广告的有害操作,许多使用AdBlocks的网络浏览器都在保护DOM免于虚拟click()
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 2015年

6
@Rizowski你需要的指数,以获得本地的HTML元素- jQuery的对象没有“选中”属性
亨里克·克里斯滕森

这对我有用。没有数组索引,我得到了未定义的错误。非常感谢,保存了我的一天。
Neri

15

我想指出的是,将'checked'属性设置为非空字符串会导致一个复选框。

因此,如果将'checked'属性设置为“ false”,则会选中该复选框。我必须将值设置为空字符串,null或布尔值false,以确保未选中该复选框。


5
这是因为非空字符串被视为真实字符串。
James Coyle

10

尝试这个:

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

如果由于某种原因,您不想(或无法).click()在checkbox元素上运行,则可以直接通过其.checked属性(IDL属性<input type="checkbox">)直接更改其值。

请注意,这样做不会触发通常相关的事件(change),因此您需要手动触发它以具有可与任何相关事件处理程序一起使用的完整解决方案。

这是原始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标签的所有按钮(请注意,不必费心在按钮上设置id并为复选框提供aria-labelledby,如果使用此方法,则应这样做)或其他多种扩展方式。最后两个addEventListener只是演示其工作方式。


2

对于单支票尝试

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

多尝试


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.