尽管调用了off(),事件仍然在被处理

时间:2016-07-18 18:33:27

标签: javascript jquery events d3.js

我希望我的所有活动在点击时停止在图表上执行。然而,尽管我的愿望,无论如何,darn处理程序仍然执行。我怀疑我的目标不同于我想要的元素。但是,打败我的方式。

the fiddle所示,单击任何扇区会使环变为绿色。然后,我希望传说文本不会重新出现在剩余的响铃区域上。

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();
  });

我已尝试将其关闭 g 路径文本以及所有。扇区类元素。什么都没有帮助。我选错了组件吗?如何查看谁持有事件处理程序?由于D3下的数据绑定,处理是否会卡住?

我很确定那里有一些奇怪的东西 - 或者至少是非常反直觉的 - 因为我已经尝试过做以下事情并且事件仍然发生(文本正在逐渐消失)输入/输出)。

$("*").off();

1 个答案:

答案 0 :(得分:4)

您正在混合d3jquery事件绑定。如果使用selection.on创建d3事件处理程序,则删除它的正确方法是:

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

更新了fiddle