Ich habe einige SVG-Kreise zusammengestellt, wobei die Farbe der Kreise bei jedem Klick zwischen Blau und Rot wechseln soll.Kann mir jemand mit dieser SVG/Javascript-Funktion auffallen, wo ich falsch liege?
Ich bekomme ein inkonsistentes Verhalten von diesem, als wenn ich auf die Kreise in meiner Localhost-Umgebung klicke, es funktioniert, aber die Farbe ändert sich nicht zu Rot bis zum zweiten Klick.
Wenn ich den Code in jsFiddle setzen, einen der Kreise funktioniert, man nicht, obwohl der Code gleich ist, und sie beide den gleichen Fehler in der Konsole geben
[Error] ReferenceError: Can't find variable: changeColor1 onclick (_display:79)
var shapeClick = \t \t \t \t document.getElementById("circle0").addEventListener("click", changeColor);
var clicks = 0;
var colorToggle = true;
function changeColor() {
var color = colorToggle ? "#ff0000" : "#1dacf9";
circle0.setAttribute('fill', color);
colorToggle = !colorToggle;
}
var shapeClick = document.getElementById("circle1").addEventListener("click", changeColor1);
var clicks = 0;
var colorToggle = true;
function changeColor1() {
var color = colorToggle ? "#ff0000" : "#1dacf9";
circle1.setAttribute('fill', color);
colorToggle = !colorToggle;
}
<svg id="table1" width="66%" height="100vh" viewBox="0 0 700 666">
<circle id="circle0" class="circles" cx="170" cy="125" r="20" fill="#1dacf9" stroke="black" stroke-width="2" onclick="changeColor()"/>
<circle id="circle1" class="circles" cx="250" cy="45" r="20" fill="#1dacf9" stroke="black" stroke-width="2" onclick="changeColor1()"/>
</svg>
ich bin sicher, dass es eine Stromlinie Weg, dies zu tun, vor allem, wenn ich es vergrößern und 100 Kreisen hinzufügen, ich kann nicht einen Weg finden, es zu tun, ohne eine große Menge an Code .
warum fügen Sie Ereignis inline und in js? – progysm
Die Tatsache, dass sich die Farbe erst beim zweiten Klick ändert, hat wahrscheinlich damit zu tun, dass 'colorToggle' zwischen beiden Funktionen/Kreisen geteilt wird. – apokryfos