我创建了一个带有.on(“click”)行为的SVG元素,并使用.on(“click”)附加了g元素,并认为我可以使用d3.event.stopPropagation()来保持SVG点击事件使用g click事件触发。相反,这两个事件继续发生。所以我必须把stopPropagation放在错误的地方。
svg = d3.select("#viz").append("svg:svg")
.attr("width", 800)
.attr("height", 800)
.on("mousedown", mousedown);
sites = svg.selectAll("g.sites")
.data(json.features)
.enter()
.append("svg:g")
.on("click", siteClick)
;
sites.append("svg:circle")
.attr('r', 5)
.attr("class", "sites")
;
function mousedown() {
console.log("mouseDown");
}
function siteClick(d, i) {
d3.event.stopPropagation();
console.log("siteClick");
}
答案 0 :(得分:22)
您似乎混淆了click
和mousedown
事件。调用stopPropagation
只会阻止单个事件的传播,这些都是单独的事件。
通常情况下,点击动作会依次显示mousedown
,mouseup
和click
个事件。
您可以将click
事件处理程序保留在子元素上,并使用mousedown
调用添加stopPropagation
事件处理程序,这应该可以实现您所追求的目标。
以下an example证明了它在类似情况下的使用。