我希望我的所有活动在点击时停止在图表上执行。然而,尽管我的愿望,无论如何,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();
答案 0 :(得分:4)
您正在混合d3
和jquery
事件绑定。如果使用selection.on
创建d3事件处理程序,则删除它的正确方法是:
d3.selectAll(".sector").on('mouseenter', null);
更新了fiddle。