我正在尝试创建一个气泡图,因为如果我点击一个气泡,气泡的标题应该出现在控制台中。我尝试了一些方法,但没有成功。
d3.json("deaths.json",
function (jsondata) {
var deaths = jsondata.map(function(d) { return d.deaths; });
var infections = jsondata.map(function(d) { return d.infections; });
var country = jsondata.map(function(d) { return d.country; });
var death_rate = jsondata.map(function(d) { return d.death_rate; });
console.log(deaths);
console.log(death_rate);
console.log(infections);
console.log(country);
console.log(date);
//Making chart
for (var i=0;i<11;i++)
{
var f;
var countryname=new Array();
var dot = new Array();
dot = svg.append("g").append("circle").attr("class", "dot").attr("id",i)
.style("fill", function(d) { return colorScale(death_rate[i]); }).call(position);
//adding mouse listeners....
dot.on("click", click());
function click()
{
/***********************/
console.log(country); //i need the title of the circle to be printed
/*******************/
}
function position(dot)
{
dot .attr("cx", function(d) { return xScale(deaths[i]); })
.attr("cy", function(d) { return yScale(death_rate[i]); })
.attr("r", function(d) { return radiusScale(infections[i]); });
dot.append("title").text(country[i]);
}
}
});
我需要打印圆圈的标题 请帮忙!!!
答案 0 :(得分:21)
使用on("click", ...)
函数可以获得好主意。但是我看到两件事:
第一个问题是您不会在click事件上调用该函数,而是调用其值。因此,您要写dot.on("click", click());
而不是dot.on("click", click);
。为了理解差异,让我们假设函数click需要一个参数,例如代表有趣的点,它会是什么?好吧,你会写下面的内容:
dot.on("click", function(d){click(d)})
与写作相同(并且不易出错):
dot.on("click", click)
现在,第二点是,确实要将节点作为函数click
的参数传递。幸运的是,对于我在我的示例中使用的on
事件,使用参数d
调用函数click,该参数表示dot
的数据。因此,您现在可以写:
dot.on("click", click);
function click(d)
{
console.log(d.title); //considering dot has a title attribute
}
注意:您也可以使用function click(d,i)
编写代表索引的i
来使用另一个参数,有关详细信息,请参阅documentation。
答案 1 :(得分:1)
如果您的数据有标题,
dot.on('click' , function(d){ console.log(d.title); });