kostenloser Webspace werbefrei: lima-city


Funktion um Variable zu ändern.

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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);
    }
  4. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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
    function update has no method 'a'
    , wenn ich's mit meinen Variabeln versuche.

    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);
    }
  5. wo kommt denn "a" her?

    poste mal deine Funktion "update".
  6. 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
  7. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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
  8. 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.
  9. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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!
  10. <?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
  11. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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
  12. 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
  13. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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 error
    zf.js:6ReferenceError: Can't find variable: parsefloat
  14. 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?
  15. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    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
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!