2016-07-18 31 views
0

我希望所有事件在点击时停止在图表上执行。然而,尽管我愿意,无论如何,织工处理程序都会被执行。我怀疑我的目标与我打算的目标不同。尽管如此,打败了我。尽管关闭()被调用,事件仍在处理中

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

我试图把它关闭 S,路径 S和文本小号ANS以及所有.sector类元素。没什么帮助。我是否选择了错误的组件?我如何检查谁持有事件处理程序?由于D3下的数据绑定,处理卡住了吗?

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

$("*").off(); 

回答

4

你混合d3jquery事件绑定。如果您创建一个D3事件处理程序selection.on,删除它的正确方法是:

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

更新fiddle

+0

有没有办法在单次重击中关闭多个/所有事件?有没有一个API?我在文档中没有看到太多... –

+1

@KonradViltersten,它看起来像[讨论](https://github.com/d3/d3/pull/1855),但从未实现。看起来你可以命名空间所有的事件,然后通过命名空间全部删除它们。 – Mark

相关问题