1

我有一个带有点击事件的图表,它运行良好,直到我点击标签(组/固定标签)。在此之后,该事件不再起作用。

我已将此活动附加到我的页面:

d3.selectAll("rect.nv-bar").on("click", function (d) {
    alert("Clicked");
});

这是一个问题:http: //jsfiddle.net/ygQZW/

我做错了什么还是某种错误?

--更新--

@explunit 发布的解决方案解决了我 50% 的问题。现在,当我单击隐藏/显示条的颜色标签时,单击效果会在先前隐藏的条上停止。

这是更新的小提琴:http: //jsfiddle.net/ygQZW/1/

我怎样才能解决这个问题?

4

2 回答 2

1

我自己解决了这个问题。

d3.selectall我没有使用 jQuery 选择器,而是选择了父标签。在父标签中,我附加了一个悬停事件,该事件在子节点上启动另一个。

通过这样做,当栏被隐藏然后再次显示时,父标签事件再次启动点击事件。

我的新代码:

$(".nv-group").on("hover", function(d) {
    $(".nv-bar").off("click"); // Remove previous events, if have
    $(".nv-bar").on("click", function(d) {
        alert("Clicked!");
    });
});

更新 jsFiddle:http: //jsfiddle.net/ygQZW/4/

我认为这不是最好的和优雅的解决方案,如果有人有更好的解决方案,请发布!

于 2013-07-12T14:50:07.700 回答
1

如果你命名你的点击处理程序,那么它不会被 NVD3 在图形更改时对事件所做的任何其他事情覆盖:

d3.selectAll("rect.nv-bar").on("click.mine", function (d) {
    alert("Clicked");
});

API

要为同一事件类型注册多个侦听器,该类型后面可以跟一个可选的命名空间,例如“click.foo”和“click.bar”。

于 2013-07-10T19:56:37.497 回答