gpt4 book ai didi

javascript - 将 'onclick' 事件附加到 D3 图表背景

转载 作者:IT王子 更新时间:2023-10-29 03:01:12 28 4
gpt4 key购买 nike

我有一个 D3 直方图图表,我在上面的条形图上附加了一个“onclick”事件:

...
var bar = svg.selectAll(".bar")
.data(data)
.enter().append("g")
.attr("class", "bar")
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
.on('mouseover', tip.show)
.on('mouseout', tip.hide)
.on('click', function(d,i){ //do stuff });
...

这完全符合预期。我还想将“onclick”事件附加到图表的背景(即图表中所有非条形图的地方),但我在这方面遇到了麻烦。我尝试过以几种方式附加事件,但在每种情况下,这个新事件似乎都会覆盖我的点击栏:

一些尝试:

$("svg:not('.bar')").on("click", function(){ //do stuff });

$("g:not('.bar')").on("click", function(){ //do stuff });

var svg = d3.select("#histogram_block").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.on("click", function(d,i){
if (d) { //do stuff}
else { //do stuff }
};

我假设有一种方法可以在初始化时将事件处理程序添加到 SVG 对象,但我不知道执行此操作的正确方法。

最佳答案

事件实际上并没有被覆盖,但两者都被触发了——SVG 和栏的 onclick 处理程序。为防止这种情况,请使用 .stopPropagation() 方法(参见 the documentation )。代码如下所示:

rect.on("click", function() {
console.log("rect");
d3.event.stopPropagation();
});

完整示例 here .比较停止事件传播的行为 here .

关于javascript - 将 'onclick' 事件附加到 D3 图表背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22941796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com