我试图弄清楚如何使由 d3 画笔创建的矩形(特别是事件矩形)响应单击事件。最终,我想在这个对象上单击一下会弹出一个菜单,但我似乎无法让 rect 元素来捕捉事件。
我试过以下代码:
var selector = d3.svg.brush();
var x = d3.scale.linear()
.range([0,500])
.domain([0,500]);
var y = d3.scale.linear()
.range([0,500])
.domain([0,500]);
d3.select('#myDiv')
.append('svg')
.attr('id','mySVG')
.attr('height',500)
.attr('width',500)
.call(selector.x(x).y(y).on('brushend',bindSelect))
function bindSelect(){
d3.select('#mySVG rect.extent')
.on('click',function(){alert('hi mom!')})
}
bindSelect
似乎触发得很好,并成功选择了.extent
矩形,但单击矩形时我没有得到任何响应。
问题似乎是brushend
当单击矩形时 d3 会触发一个事件,我猜这会在某处停止事件传播?
有谁知道如何解决这个问题?我唯一的想法是在事件的范围矩形之上创建另一个矩形brushend
,然后使用该矩形来处理点击行为,但这似乎是一种混乱的做事方式。
此外,这里是代码的小提琴。