Javascript 尽管调用了off(),事件仍在处理中

Javascript 尽管调用了off(),事件仍在处理中,javascript,jquery,events,d3.js,Javascript,Jquery,Events,D3.js,我希望单击图表时,图表上的所有事件都停止执行。然而,不管我怎么想,该死的处理者还是被处死了。我怀疑我的目标与我想要的不同。但我不知道怎么做 例如,单击任何扇区都会使戒指变为绿色。然后,我希望图例文本不会重新出现在剩余的环形区域上 var grx = chart.selectAll(".sector").data(pie(dataPoints)) .enter().append("g").attr("class", "sector") .on("mouseenter", function

我希望单击图表时,图表上的所有事件都停止执行。然而,不管我怎么想,该死的处理者还是被处死了。我怀疑我的目标与我想要的不同。但我不知道怎么做

例如,单击任何扇区都会使戒指变为绿色。然后,我希望图例文本不会重新出现在剩余的环形区域上

var grx = chart.selectAll(".sector").data(pie(dataPoints))
  .enter().append("g").attr("class", "sector")
  .on("mouseenter", function (target) {
    $(".legendMain").animate({ opacity: 0 }, { queue: false });
  })
  .on("mouseleave", function () {
    $(".legendMain").animate({ opacity: 1 }, { queue: false });
  })
  .on("click", function (target) {
    $("#chart .sector path").css("fill", "rgb(0,111,0)");
    d3.selectAll("#chart .sector path")
      .transition().duration(1000).attr("d", out);

    //d3.selectAll("#chart .sector text").remove();
    $(".sector").off();
    $("path").off();
    $("g").off();
  });
我已经尝试过关闭gs、路径和文本以及所有的扇区类元素。没什么帮助。我是否选择了错误的组件?如何检查谁持有事件处理程序?处理是否因为D3下的数据绑定而受阻

我很确定这里面有一些奇怪的东西——或者至少是非常反直觉的——因为我试着做了下面的事情,但事件仍然在发生(文本正在淡入/淡出)


您正在混合
d3
jquery
事件绑定。如果使用上的选择创建d3事件处理程序,正确的删除方法是:

d3.selectAll(".sector").on('mouseenter', null);

更新。

您正在混合
d3
jquery
事件绑定。如果使用上的选择创建d3事件处理程序,正确的删除方法是:

d3.selectAll(".sector").on('mouseenter', null);

已更新。

是否有办法一次关闭多个/所有事件?有一个API吗?我在文档中没有看到太多…@KonradViltersten,它看起来像但从未实现过。您似乎可以为所有事件命名名称空间,然后按名称空间将它们全部删除。有没有一种方法可以一次性关闭多个/所有事件?有一个API吗?我在文档中没有看到太多…@KonradViltersten,它看起来像但从未实现过。似乎可以为所有事件命名名称空间,然后按名称空间将它们全部删除。