Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在手动设置目标时不调度OnChange事件_Javascript_Checkbox_Dom Events_Onchange - Fatal编程技术网

Javascript 为什么在手动设置目标时不调度OnChange事件

Javascript 为什么在手动设置目标时不调度OnChange事件,javascript,checkbox,dom-events,onchange,Javascript,Checkbox,Dom Events,Onchange,我对JavaScript如何处理更改事件感到困惑,我正在寻找一些见解 假设我们有两个HTML控件;一个复选框和一个按钮,我想使用JS显示一条消息,说明复选框从选中更改为未选中的次数 <input type="checkbox" id="cb" /> <button id="btn">Change Checkbox</button> <div id="msg"></div> 在这里测试一下 请注意,当复选框以编程方式设置为cb.chec

我对JavaScript如何处理
更改事件感到困惑,我正在寻找一些见解

假设我们有两个HTML控件;一个复选框和一个按钮,我想使用JS显示一条消息,说明复选框从
选中
更改为
未选中
的次数

<input type="checkbox" id="cb" />
<button id="btn">Change Checkbox</button>
<div id="msg"></div>
在这里测试一下

请注意,当
复选框
以编程方式设置为
cb.checked=”时,
复选框
OnChange
事件不会被调度!cb.已选中
-i、 e.
cb_onChange
侦听器仅在用户手动单击复选框时执行


当我更改代码中的状态时,
OnChange
事件为什么没有被触发?

这是javascript中输入元素上的事件的工作方式

如果希望执行回调,则需要手动触发复选框上的更改事件

这方面有一些问题:


当浏览器在复选框中标识更改事件时,它会将选中属性设置为!选中并调用订阅的函数,您可以假定这些函数发生在一个函数(f1)中,并且在事件发生时调用这些函数。在这种情况下,您不是在调用函数f1,而是在设置属性

这回答了你的问题吗?
var count = 0;
var cb = document.getElementById("cb");
var btn = document.getElementById("btn");
var msg = document.getElementById("msg");
cb.addEventListener("change", cb_onChange);
btn.addEventListener("click", btn_onClick);

// Change the state of the Checkbox when user clicks the Button
function btn_onClick() {
cb.checked = !cb.checked;
}

// The state of the Checkbox has changed, so increment the change count and display it
function cb_onChange() {
msg.innerHTML = "Checkbox changed " + count+++" times";
}