我有一个 SVG 结构,里面有一些形状。我想在单击形状时触发一个事件,在单击 SVG 时触发另一个事件。问题是 SVG 事件总是被触发。
为了防止这种情况,我正在禁用形状中的事件冒泡。此外,我尝试使用 d3 禁用该事件,但似乎不起作用。还尝试使用本机 Javascript 代码禁用事件。
超级简单代码的一个例子是:
SVG结构
<svg id="canvas" xmlns="http://www.w3.org/2000/svg" version="1.1">
<g>
<circle class="shape" r="10" cx="10" cy="10">
</g>
</svg>
Javascript代码
d3.select('#canvas').on('click',svgClickEvents);
d3.selectAll('.item')
.on("mouseover",mouseoverItem)
.on('mouseleave',mouseleaveItem);
//click
d3.selectAll('.item',function(){
//when an item is clicked, svgClickEvents must not be fired
d3.select('#canvas').on('click',null); //this should remove the event listener
//also tried with getElementById('canvas').removeEventListener('click',clickEvents,false);
d3.select(this)
.on("click",function() {
d3.event.stopPropagation();
console.log("click circle")
});
});
我知道事件没有被禁用,因为我onsole.log()
从 clickEvents 函数获得了文本警报。