2013-10-22 40 views
-1

我必须为所有的圈元素做一个函数,并使它们可点击。用我的代码,我只能点击最后创建的节点,我不明白为什么。你能帮我吗?我使用d3库,多数民众赞成我的代码:给所有的圆圈元素onclick beahviour

var allCircles = vis.selectAll('circle'); 

allCircles.on('click', function(){ 
    /* make the same stuff depending from the circle clicked */ 
}); 

如果您需要更多的解释问我。

非常感谢你对我的帮助!`

+0

只是为了确认,你有没有检查过'allCircles'实际上引用了多个元素? – plalx

+0

allCircles是一个包含一个元素的对象,即创建的所有圆的数组。 – Roberto

回答

0

我不使用D3库,我从来没有听说过,但我可以不用

var circles=document.getElementsByTagName('circle'); 
function onclik() { 
    //do stuff 
} 
for(var i=0;i<circles.length;i++){ 
    circles[i].setAttribute("onclick","onclik()") 
} 

我希望它能帮助!

+0

此代码旨在放入SVG文件中。如果你想要它在HTML文件中,替换“document”值得保存SVGDocument对象的变量名 – 0e4ef622

1

可能最好在圆圈的(父)容器元素上添加事件侦听器。这意味着您有这样一个元素,例如您可以添加侦听器的<g>

var circleContainer = /* find your g element that contains the circles here */; 

circleContainer.on('click', function(){ 
    // d3.event.target is the clicked circle 
    d3.select(d3.event.target).attr("fill", "blue"); 
}); 

如果你比较熟悉的jQuery的概念被称为'delegated events'那里。