Ho un istogramma D3, su cui ho allegato un 'onclick' evento alle barre:Collegamento 'onclick' evento a D3 sfondo grafico
...
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 });
...
Questo funziona esattamente come previsto. Vorrei anche allegare un evento 'onclick' allo sfondo del grafico (cioè ovunque nel grafico che non è una barra), ma ho problemi con questo. Ho provato allegando l'evento in un paio di modi, ma in ogni caso, questo nuovo evento sembra ignorare il mio bar-click:
Alcuni tentativi:
$("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 }
};
Io parto dal presupposto che c'è un modo per aggiungere il gestore di eventi all'oggetto SVG quando viene inizializzato, ma non conosco il modo corretto per farlo.
Solo un promemoria. '$ (" svg: not ('. bar') ")" significa ottenere tutti i 'svg's che non hanno la classe' bar'. Non significa ottenere la sezione 'svg's al di fuori degli elementi con la classe' bar'. –