javascript - 为什么使用 checked 属性更改复选框时不调用 onchange 函数

标签 javascript events

使用另一个按钮处理复选框。

  1. 如果我直接点击复选框,则会触发 onchange。

  2. 但是当我使用按钮更改复选框时,不会调用 onchange(即 show() 方法)。

var checkbox=document.getElementById("x");
var button=document.getElementById("y");

button.addEventListener("click",function(){
checkbox.checked== true
?checkbox.checked=false
:checkbox.checked=true;

})


var show=function(){
window.alert("onchange called");
}
<input type='checkbox' name='xyz' id='x' onchange="show()">

<br>

<button id='y'>Toggle Checkbox</button>

如果单击按钮,如何调用 show() 方法。

最佳答案

设置复选框的 checked 属性不会触发该复选框的 change 事件。您必须自己发送:

y.addEventListener('click', (e) => {
  // toggle the checkbox
  x.checked = !x.checked;
  // and manually dispatch a change event on the checkbox
  let change = new Event('change');
  x.dispatchEvent(change);
})

x.addEventListener('change', (e) => {
  console.log(x.checked);
})
<input type='checkbox' name='xyz' id='x' />

<br>

<button id='y'>Toggle Checkbox</button>

关于javascript - 为什么使用 checked 属性更改复选框时不调用 onchange 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481530/

相关文章:

javascript - 在 JavaScript 中对字符串调用 forEach

javascript - 使用 JS 在特定的流体页面中隐藏页脚

javascript - 如何使用 jQuery 或 JavaScript 聚焦 <tr> 或 <td> 标签?

javascript - 在JS中将字符串转换为数组

c# - 处理窗体上所有控件的单击

Android - 跟踪

javascript - 您可以在选项元素上设置点击事件吗? ( Angular v2.0.0-beta.0)

android - 在 PhoneGap 中启用数字键盘上的 Enter 键

events - 如何在 jQuery 中重新触发(或延迟触发) `mousedown` 事件?

events - jwplayer - 检测开始