当我在d3js中以编程方式执行时,为什么不触发复选框更改事件

KNN*_*. T 6 d3.js

所以我有一个更改复选框的功能

somefunction() {
    d3.select("input").property("checked", true);
}
Run Code Online (Sandbox Code Playgroud)

在另一个函数中,我检测到复选框中的更改,如下所示:

d3.selectAll("input").on("change", change);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当它更改复选框而不点击它时,它不会将其检测为"正确"更改.我该怎么做才能让它发现其他东西将其变为"正确"的变化?

Mar*_*ark 6

d3在它的方法中使用标准的addEventListeneron.你的问题是,改变检查属性不会引发任何事件addEventListener听到.正确的方法是在设置预言后自己调用处理程序:

var myInput = d3.select("input");
myInput.property("checked", true);
myInput.on("change")(); // call it yourself
Run Code Online (Sandbox Code Playgroud)

完整的工作代码:

<!DOCTYPE html>
<html>

  <head>
    <script data-require="d3@3.5.3" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>
  </head>

  <body>
    <input type="checkbox" />
    <script>
      
      var checked = false;
      setInterval(function(){
        checked = !checked;
        var myInput = d3.select("input");
        myInput.property("checked", checked);
        myInput.on("change")();
      }, 2000);
      
      
      d3.select("input").on("change", function(d){
        console.log('checkbox changed');
      });

    </script>
  </body>

</html>
Run Code Online (Sandbox Code Playgroud)