Check/Uncheck checkbox with JavaScript (jQuery or vanilla)?

后端 未结 12 1286
渐次进展
渐次进展 2020-11-22 09:39

How can a checkbox be checked/unchecked using JavaScript, jQuery or vanilla?

12条回答
  •  -上瘾入骨i
    2020-11-22 10:21

    If, for some reason, you don't want to (or can't) run a .click() on the checkbox element, you can simply change its value directly via its .checked property (an IDL attribute of ).

    Note that doing so does not fire the normally related event (change) so you'll need to manually fire it to have a complete solution that works with any related event handlers.

    Here's a functional example in 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', '
    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); }
    
    
    
    
    
    No changes yet!

    If you run this and click on both the checkbox and the button you should get a sense of how this works.

    Note that I used document.querySelector for brevity/simplicity, but this could easily be built out to either have a given ID passed to the constructor, or it could apply to all buttons that act as aria-labels for a checkbox (note that I didn't bother setting an id on the button and giving the checkbox an aria-labelledby, which should be done if using this method) or any number of other ways to expand this. The last two addEventListeners are just to demo how it works.

提交回复
热议问题