2016-07-18 50 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

相關問題