Funktion um Variable zu ändern.
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
ball
beispiel
break
code
dank
fehler
funktion
funktionieren
gefunden code
gross kleinschreibung
hilfe
losung
problem
stelle
switch
type
update
url
versuch
zeiger
-
Hallo,
ich habe 3 Variabeln
a = 1; b = 2; c = 3;
Ich möchte gerne immer nur eine der Variabeln ändern, z.B. a = 4, aber egal welche ich ändre, danach macht es genau das gleiche. Als einfaches Beispiel:alert(a*b*c);
In diesem Fall könnte ich jetzt 3 Funktionen erstellen:
function update_a(value){ a = value; alert(a*b*c); } function update_b(value){ c = value; alert(a*b*c); } function update_c(value){ c = value; alert(a*b*c); }
Ist der Code in der Funktion aber 10 Zeilen lange, hab ich schon 20 Zeilen, die eigentlich schon da stehen. Meine vorstellung wär so etwas:
function update(variable, value){ variable = value; alert(a*b*c); }
Das wär eine Funktion für alle, aber natürlich klappt das nicht, da variable einfach eine Variable ist, und diese den Wert bekommt, aber a bleibt immernoch gleich. Könnte man sowas mit 'Klassen' lösen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi, hilft dir vielleicht sowas weiter?
function update(variable, value){ switch (variable) { case 1: a=value; break; case 2: b=value; break; case 3: c=value; break; case 4: d=value; break; ... } variable = value; alert(a*b*c*d*e*f*g*h); }
-
esadat schrieb:
Hi, hilft dir vielleicht sowas weiter?
function update(variable, value){ switch (variable) { case 1: a=value; break; case 2: b=value; break; case 3: c=value; break; case 4: d=value; break; ... } variable = value; alert(a*b*c*d*e*f*g*h); }
Scheint logisch, danke, aber bei mir kommt dann
, wenn ich's mit meinen Variabeln versuche.function update has no method 'a'
function recalculate(variable, value, updateid){ switch (variable) { case 1: v0 = parseFloat(value); break; case 2: angle = parseFloat(value); break; case 3: h = parseFloat(value); break; case 4: g = parseFloat(value); break; case 5: angle = parseFloat(value); break; } variable = parseFloat(value); reset(); wurfparabel(v0, angle, h, g); ball(ball_slider_value); update(updateid, value); }
-
Hallo,
Vorschlag 1:
function update(variabel, value) { if(variabel== "a") { a = value; } if(variabel== "b") { b = value; } if(variabel== "c") { c = value; } alert(a*b*c); }
So hast du zwar wieder etwas mehr Text, aber we ist weniger als drei einzelne Funktionen, wenn man das "alert()" durch etwas aufwendigeres ersetzt.
Vorschlag 2:
function update_a(value) { a = value; MachWasAnderes(); } function update_b(value) { b = value; MachWasAnderes(); } function update_c(value) { c = value; MachWasAnderes(); } function MachWasAnderes() { alert(a*b*c); }
Du musst selber entscheiden, was dir besser gefällt. Ich denke, dass beides gleich gut ist.
Du könntest natürlich auch das "a = 4" direkt notieren, bevor du eine Funktion mit dem Inhalt wie bei mir im Beispiel 2 die Funktion "MachWasAnderes()" aufrufst.
MFG THWBM -
esadat schrieb:
wo kommt denn "a" her?
poste mal deine Funktion "update".
Das 'a' war ein Beispiel, ich kopier mal den exakten, ganzen Error raus:
Uncaught TypeError: Object function recalculate(variable, value, updateid){ switch (variable) { case 1: v0 = parseFloat(value); break; case 2: angle = parseFloat(value); break; case 3: h = parseFloat(value); break; case 4: g = parseFloat(value); break; case 5: angle = parseFloat(value); break; } variable = parseFloat(value); reset(); wurfparabel(v0, angle, h, g); ball(ball_slider_value); update(updateid, value); } has no method 'angle'
Funktion update: function update(id, value){ var a = 0; if(a == 0){ a = 1; var ob = document.getElementById(id); var type = ob.getAttribute(type); if(type == "range"){ if(value == ""){ ob.value = 0; }else if(value>Number(ob.max)){ ob.value=Number(ob.max); }else ob.value = Number(value); }else{ ob.value = value; } a = 0; } }
Wie ich die Funktion aufrufe:
<input id="angle_slider" type="range" min="1" max="90" value="45" onchange="recalculate('angle', Angle(this.value), 'angle_text');" />
Funktion Angle:
function Angle(x) { return x * Math.PI / 180.0; }
@thwbm
Die erste Lösung ist genau was ich gesucht habe, deine Lösungen kenn ich beide auch, aber wie im ersten Post geschrieben, will ichs anders lösen, und zwar genau so, wies mir esdat vorgeschlagen hat. Aber danke.
Beitrag zuletzt geändert: 17.5.2013 16:36:18 von c143 -
Das Problem könnte sein, dass du eine Variable und eine Funktion angle/Angle genannt hast. Nenn angle mal um in angle2 oder so. Gibt es in deinem Script auch die Funktion Angle()?
Ansonsten fällt mir auch nichts ein...
Versuch vllt. mal durch alerts zu schauen, ab welcher Stelle der Fehler wann vorkommt.
-
esadat schrieb:
Das Problem könnte sein, dass du eine Variable und eine Funktion angle/Angle genannt hast. Nenn angle mal um in angle2 oder so. Gibt es in deinem Script auch die Funktion Angle()?
Ansonsten fällt mir auch nichts ein...
Versuch vllt. mal durch alerts zu schauen, ab welcher Stelle der Fehler wann vorkommt.
Wenn ich angle rausnehmen würde, kommt einfach die nächste variable als Fehler, daran liegts nicht. Ich versuchs morgen mal mit den alerts, danke, aber ich fürchte ich muss es anders lösen. Aber danke für die Hilfe! -
<?php function update($variable, $value) { global $a, $b, $c; $$variable = $value; echo $a*$b*$c; } $a = 1; $b = 2; $c = 0; update("c", 3); ?>
So sollte das in php funktionieren, nicht getestet... aber wie das auch in Javascript funktioniert, weiß ich nicht.
Edit:
Habe das hier gefunden, vielleicht ein Denkanstoss zur Lösung deines Problems...
Beitrag zuletzt geändert: 18.5.2013 23:55:07 von staymyfriend -
EDIT: Neuer Stand:
Ich habs jetzt so weit geschafft, dass der Error nicht mehr angezeigt wird, und meine update() Funktion wird ausgeführt:
function recalculate(variable, value, updateid){ switch (variable) { case 1: v0 = parsefloat(value); break; case 2: angle = Angle(parsefloat(value)); break; case 3: h = parsefloat(value); break; case 4: g = parsefloat(value); break; } reset(); update(updateid, value); wurfparabel(v0, angle, h, g); ball(ball_slider_value); //variable = value; }
also die unteren Funktionen reset(), wurfparabel(), update() und ball() werden ausgeführt, aber die Variabeln werden nicht geändert. Sie bleiben immer wie ich sie am Anfang definiert habe.
staymyfriend schrieb:
<?php function update($variable, $value) { global $a, $b, $c; $$variable = $value; echo $a*$b*$c; } $a = 1; $b = 2; $c = 0; update("c", 3); ?>
So sollte das in php funktionieren, nicht getestet... aber wie das auch in Javascript funktioniert, weiß ich nicht.
Edit:
Habe das hier gefunden, vielleicht ein Denkanstoss zur Lösung deines Problems...
Genau das, habe ich ja die ganze zeit mit esdats hilfe versucht... Und mit Arrays will ichs nicht lösen, aber danke.
Beitrag zuletzt geändert: 19.5.2013 10:41:20 von c143 -
Hab' gerade noch etwas gefunden...
function update(variable, value) { eval(variable + " = " + value); alert(a*b*c); }
Beitrag zuletzt geändert: 19.5.2013 10:43:56 von staymyfriend -
staymyfriend schrieb:
Hab' gerade noch etwas gefunden...
function update(variable, value) { eval(variable + " = " + value); alert(a*b*c); }
Das ist einfach nur genial. Perfekt! Nur gibt es ein Problem; Meine funktion schaut nun folgendermassen aus:
function recalculate(variable, value, updateid){ eval(variable + " = " + parsefloat(value)); reset(); update(updateid, value); wurfparabel(v0, angle, h, g); ball(ball_slider_value); //variable = value; }
ohne parsefloat() funktioniert die Variabelnändern, aber eben noch falsch, sobald ich das aber noch dazuschreib, bekomm ich den errorzf.js:6ReferenceError: Can't find variable: parsefloat
-
parseFloat()
Achte mal auf die Gross-/Kleinschreibung... hatte das schon mal, dass es nur daran gelegen hat. Alle deine Variablen hast Du vorher aber irgendwie schon mit "var irgendwas" initialisiert, oder? -
staymyfriend schrieb:
parseFloat()
Achte mal auf die Gross-/Kleinschreibung... hatte das schon mal, dass es nur daran gelegen hat. Alle deine Variablen hast Du vorher aber irgendwie schon mit "var irgendwas" initialisiert, oder?
Ich hab das grad mit meinem Codeprogramm autoverfollständigen lassen O.o Aber du hattest recht, funktioniert jetzt perfekt. Geile Lösung :D -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage