Ich habe SVG-Grafik über d3.js generiert, und klicken Sie auf Ereignisse mit DOM von d3.js erzeugt funktioniert, aber ein DOM außerhalb D3.js preparated einfach Feuer der Veranstaltung nichtButton ouside d3.js Svg zum Auswählen und Ändern d3.js Elemente
//d3.js generated DOM
var marker = layer.selectAll("svg")
.data(data)
.each(transform) // update existing markers
.enter().append("svg")
.each(transform)
.attr("class", function (d) {
return d[12] === "Region" ? "marker region" : "marker";
});
//pre-created DOM
var btn = d3.select('#vslCur_btn0');
//method i'd like to trigger on click
var hideAct = function(){
console.log("trying to hide"+marker.size());
marker.filter(function (d) {
return d[12] === "Region";
}).style("width", function (d) {
console.log('attr lulz:' + d3.select(this).style('width'));
return d3.select(this).style('width') === '70px' ? '0px' : '70px';
});
};
marker.on("click", hideAct);//works when clicked displays "trying to hide295" or the number of svg
btn.on("click", hideAct);//does not work but displays "trying to hide0" on console
Offensichtlich #vslCur_btn0
außerhalb des svg existiert. Wenn selectAll("svg")
Sie stört, gibt es mehrere absolute Position svgs innerhalb einer div, die als eine Art Leinwand (Google Maps) dient, #vslCur_btn0
existiert außerhalb dieser Leinwand und ist eine Art Systemsteuerung. die Fragen ist
- Warum behandelt
#vslCur_btn0
außerhalb Umfang - d3js Wie dieses Umfangs Problem außer Kraft zu setzen und auf ‚Außenseiter‘ DOM
Das ist falsch, Tasten außerhalb der SVG funktionieren gut. Bitte fügen Sie Ihre dot_click-Funktion ein. –
Entschuldigung, das war Tippfehler, ursprünglicher Code war viel länger, dies ist präzise Version – jyonkheel
bearbeitet den Code erneut, fügte Größe überprüfen, bemerkte, dass marker.size() wird 0 auf Außenseiter DOM angezeigt, während es 295 auf d3js Insider DOM anzeigt – jyonkheel