Ich habe ein D3-Histogrammdiagramm, auf dem ich ein ‘onclick’-Ereignis an die Balken angehängt habe:
...
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 });
...
Das funktioniert genau wie erwartet. Ich würde auch gerne ein ‘onclick’-Ereignis an den Hintergrund des Diagramms anhängen (dh überall im Diagramm, das kein Balken ist), aber ich habe Probleme damit. Ich habe versucht, das Ereignis auf verschiedene Arten anzuhängen, aber in jedem Fall scheint dieses neue Ereignis meinen Balkenklick zu überschreiben:
Einige Versuche:
$("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 }
};
Ich gehe davon aus, dass es eine Möglichkeit gibt, den Event-Handler dem SVG-Objekt hinzuzufügen, wenn es initialisiert wird, aber ich weiß nicht, wie ich das richtig machen soll.
Nur eine Erinnerung.
$("svg:not('.bar')")
bedeutet alles bekommensvg
s, die nicht habenbar
Klasse. Es bedeutet nicht, die zu bekommensvg
s Abschnitt außerhalb der Elemente mitbar
Klasse.– Batu. Khan
8. April 2014 um 15:54 Uhr