2013-10-22 78 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'那裏。