【发布时间】:2014-05-21 10:19:27
【问题描述】:
我有一个 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”事件(即图表中不是条形的任何地方),但我遇到了麻烦。我尝试过以几种方式附加事件,但在每种情况下,这个新事件似乎都会覆盖我的 bar-click:
一些尝试:
$("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:not('.bar')")表示获取所有没有bar类的svgs。这并不意味着将svgs 部分放在具有bar类的元素之外。
标签: javascript jquery d3.js