通过JavaScript以编程方式更改复选框时触发事件

Ben*_*ell 5 javascript checkbox events

我需要知道何时使用纯JavaScript的Javascript更改了复选框。

我设置了一个“ onchange”事件,当用户更改复选框时,该事件成功执行,但是当另一个JS函数使用以下代码对其进行更改时,该事件将不起作用:

document.getElementById('mycheckbox').checked = true;
Run Code Online (Sandbox Code Playgroud)

当JS选中或取消选中复选框时,是否可以使用纯JavaScript触发事件?

Jos*_*ier 9

您可以change使用document.createEvent/ initEvent方法创建事件,然后使用该dispatchEvent方法从指定的checkbox元素分派事件。

var event = document.createEvent("HTMLEvents");
event.initEvent('change', false, true);
checkbox.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

这将允许您以编程方式更改checked元素的属性,然后触发change事件,从而触发事件侦听器。

这是一个基本示例:

var event = document.createEvent("HTMLEvents");
event.initEvent('change', false, true);
checkbox.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
var checkbox = document.querySelector('[type="checkbox"]');
var button = document.querySelector('button');

// Event Listener:
checkbox.addEventListener('change', function(event) {
  alert(event.target.checked);
});

// Programmatically change the `checked` property:'
button.addEventListener('click', function() {
  checkbox.checked = !checkbox.checked;
  triggerEvent(checkbox, 'change');
});

function triggerEvent(element, eventName) {
  var event = document.createEvent("HTMLEvents");
  event.initEvent(eventName, false, true);
  element.dispatchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

另外,您也可以使用Event()构造函数,但是对浏览器的支持较少。

var event = new Event('change');
checkbox.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

<input type="checkbox" />
<button>Programmatically trigger 'change' event</button>
Run Code Online (Sandbox Code Playgroud)
var event = new Event('change');
checkbox.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)