javascript - 尽管调用了 off() ,事件仍在继续处理

标签 javascript jquery events d3.js

我希望在单击图表时停止在图表上执行我的所有事件。然而,尽管我愿意,这些该死的处理者还是被处决了。我怀疑我的目标元素与我的意图不同。不过,这让我很困惑。

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路径文本以及所有.sector 类元素。没有任何帮助。我是否选择了错误的组件?如何检查谁在持有事件处理程序?处理是否因为D3下的数据绑定(bind)而卡住?

我很确定那里有一些奇怪的东西 - 或者至少是高度反直觉的 - 因为我已经尝试执行以下操作并且事件仍然发生(文本正在淡入/淡出)。

$("*").off();

最佳答案

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

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

已更新fiddle .

关于javascript - 尽管调用了 off() ,事件仍在继续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38443742/

相关文章:

javascript - 为什么不能在 Angular 配置中使用提供程序?

javascript - 循环隐藏和显示表格行

javascript - 通过JSON获取后在jquery中添加两个文本框值

javascript - find ('a,b' ) 比 find ('a' )+find ('b' 慢,为什么?

html - Canvas:在线点击事件

java - GWT:如何将事件放入队列(相当于 Swing invokeLater())?

javascript - 在 jquery ui 对话框中加载主干 js View iframe

javascript - 如何在 GraphQL (Relay) 中查询和改变数组类型?

jquery - 删除行第一位置的 div-col-md-4

events - 事件点击 : Varying results with CGEventPost, kCGSessionEventTap, kCGAnnotatedSessionEventTap, CGEventTapPostEvent