图例Click事件在迭代后不起作用

时间:2018-10-09 10:26:37

标签: javascript d3.js dimple.js

我面临着dimple.js的一个问题。我创建了一个堆栈图,并且希望将click事件绑定到该图的每个图例上。如果重新加载页面,那么它可以正常工作,但是当我通过函数调用更改图表数据时,其更改图表内容的效果很好,但是图例单击功能不再起作用。 请帮助摆脱这种情况。

  

注意:我不想使用Jquery点击处理程序功能。我使用了酒窝Js选择器。下面是我使用过的代码,我也附加了小提琴链接。   Fiddle Link

var svg = dimple.newSvg("#chartContainer", 590, 400);
var data = [
    { Animal: "Cats", Value: (Math.random() * 1000000) },
    { Animal: "Dogs", Value: (Math.random() * 1000000) },
    { Animal: "Mice", Value: (Math.random() * 1000000) },
    { Animal: "Rat", Value: (Math.random() * 1000000) },
    { Animal: "Cow", Value: (Math.random() * 1000000) }
];
var myChart = new dimple.chart(svg, data);
myChart.setBounds(60, 30, 510, 305)
var x = myChart.addCategoryAxis("x", "Animal");
x.addOrderRule(["Cats", "Dogs", "Mice"]);
myChart.addMeasureAxis("y", "Value");
myChart.addSeries("Animal", dimple.plot.bar);
myChart.addLegend(30, 100, 60, 300, "left");
myChart.draw();
svg.selectAll("rect").on("click",function(){
    console.log("Hello");
});

//svg.selectAll("g rect.legendKey").on("click",function(){
//  console.log("Hello");
//});
d3.select("#btn").on("click", function() {
   myChart.data = [
     { Animal: "Cats", Value: (Math.random() * 1000000) },
     { Animal: "Dogs", Value: (Math.random() * 1000000) },
     { Animal: "Mice", Value: (Math.random() * 1000000) }
   ];
   myChart.draw(1000);
});

1 个答案:

答案 0 :(得分:0)

在按钮单击处理程序中,您必须将图例单击处理程序绑定到myChart.draw(1000);

之后的新图例上
function legendClick(){
    console.log("Hello");
}

d3.select("#btn").on("click", function() {
   myChart.data = [
     { Animal: "Cats", Value: (Math.random() * 1000000) },
     { Animal: "Dogs", Value: (Math.random() * 1000000) },
     { Animal: "Mice", Value: (Math.random() * 1000000) }
   ];
   myChart.draw(1000);
   svg.selectAll(".legendKey").on("click", legendClick);
});