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

Javascript 为什么在使用checked属性更改复选框时不调用onchange函数,javascript,events,Javascript,Events,复选框使用另一个按钮处理 如果我直接点击复选框,onchange就会触发 但当我使用按钮更改复选框时,不会调用onchange(即show()方法) var checkbox=document.getElementById(“x”); var按钮=document.getElementById(“y”); addEventListener(“单击”,函数(){ checkbox.checked==true ?checkbox.checked=false :checkbox.checked=tr

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

  • 如果我直接点击复选框,onchange就会触发

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

  • var checkbox=document.getElementById(“x”);
    var按钮=document.getElementById(“y”);
    addEventListener(“单击”,函数(){
    checkbox.checked==true
    ?checkbox.checked=false
    :checkbox.checked=true;
    })
    var show=function(){
    window.alert(“调用onchange”);
    }
    
    

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

    y.addEventListener('click',(e)=>{
    //切换复选框
    x、 选中=!x.checked;
    //并在复选框上手动分派更改事件
    让更改=新事件(“更改”);
    x、 调度事件(变更);
    })
    x、 addEventListener('change',(e)=>{
    控制台日志(x.checked);
    })
    
    

    切换复选框
    以编程方式更改属性或属性不会触发更改事件。不过,您可以手动执行此操作,这意味着,我需要在单击按钮时调用show方法,而不是在复选框更改时调用。这是一个很好的解释。我有点惊讶,我找不到一个规范的——似乎所有关于触发变更事件的问题都在jQuery中被标记了,所有答案都使用了这个,而不仅仅是JS。当您以编程方式设置
    @JonathanGagne时,这同样适用于其他输入类型,如果您没有抓住
    show()
    功能。它仅用于检查是否发生更改事件(我的代码通过将
    addEventListener()
    应用于复选框本身来执行此操作)。另外,问题不在于如何对复选框调用show()进行编程更改,而在于为什么onchange不是由复选框checked属性的更改触发的。@JonathanGagne您似乎很沮丧,并且变得愤世嫉俗。为什么呢?只是我觉得你没抓住问题的重点。你一直坚持要错过它。OP问题的核心是“为什么对复选框状态的编程更改不会触发该复选框的更改事件”。“你的回答如何回答这些问题呢?”康奈索我的朋友,我既不沮丧也不愤世嫉俗。您的解决方案是最方便的方法。然而,我首先想到OP问题。问题:如果单击按钮,如何调用
    show()
    方法。回答:触发单击以更改复选框值。解决方案:换一行。我相信我们应该帮助理解他们的代码,而不是向他们展示最好的方法。我们必须跟上发展的步伐。