Michael Neubert: Variablenübergabe und Auswertung

Hallo,

in einer kleinen JavaScript Funktion bin ich auf folgendes Problem gestoßen:

function SubmitButton(eingabe)
{
   document.eingabe.abschicken.value="Bitte warten...";
   document.eingabe.abschicken.disabled=true;
}

Der Funktion wird ein Wert übergeben, den ich nachher zur Instanzierung brauche. Jedoch wird bei "document.eingabe" nicht der Inhalt der Variable eingabe genommen, sondern lediglich der Variablenname (also bleibt "eingabe" stehen).

Wie bekommt man jetzt den Inhalt der Variable an diese Stelle?

Danke im Vorraus für eure Hilfe!

Beste Grüße
Michael

  1. echo $begrüßung;

    Wie bekommt man jetzt den Inhalt der Variable an diese Stelle?

    mit eval()

    echo "$verabschiedung $name";

    1. hi,

      Wie bekommt man jetzt den Inhalt der Variable an diese Stelle?

      mit eval()

      that's quark, my dear.

      es handelt sich doch um formularelemente - also:
      http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines ("Schema 3")

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo wahsaga,

        genau danach hatte ich gesucht. Vielen Dank!

        Gruß
        Michael

      2. echo $begrüßung;

        es handelt sich doch um formularelemente

        Gut, in dem Fall ist das einfacher.

        Was ist aber, wenn es sich nicht um Formularelemente handelt? Gibt es da auch eine eval-freie Lösung?

        echo "$verabschiedung $name";

        1. es handelt sich doch um formularelemente

          Gut, in dem Fall ist das einfacher.

          Was ist aber, wenn es sich nicht um Formularelemente handelt? Gibt es da auch eine eval-freie Lösung?

          Ja.

          alert( window['variabel'] )

          eval ist evil!

          Struppi.

          1. hi,

            Was ist aber, wenn es sich nicht um Formularelemente handelt? Gibt es da auch eine eval-freie Lösung?

            dann nimmt man eine der document.getElement(s)By-methoden.

            Ja.
            alert( window['variabel'] )

            wie meinen? wir reden hier vom zugriff auf HTML-elemente über den in einer variablen abgelegten namen oder id.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. echo $begrüßung;

              Was ist aber, wenn es sich nicht um Formularelemente handelt? Gibt es da auch eine eval-freie Lösung?

              dann nimmt man eine der document.getElement(s)By-methoden.

              Dann muss ich weiter präzisieren. Ich meine eher Objekteigenschaften, die nicht zwingend HTML-Bestandteil sind und sich dann auch nicht über getElement(s)By... aufrufen lassen.

              echo "$verabschiedung $name";

              1. hi,

                Dann muss ich weiter präzisieren. Ich meine eher Objekteigenschaften, die nicht zwingend HTML-Bestandteil sind

                sondern?

                und sich dann auch nicht über getElement(s)By... aufrufen lassen.

                wenn du die obejktreferenz mittels JS ermittelst, kannst du da auch gerne eigenschaften wie .blubb = "4711" dranhängen.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. echo $begrüßung;

                  Objekteigenschaften, die nicht zwingend HTML-Bestandteil sind

                  sondern?

                  Beispielsweise hat das Object tr eine Eigenschaft namens style: tr.style
                  style lässt sich in dem Fall nicht mit getElement(s)By... ansprechen.

                  und sich dann auch nicht über getElement(s)By... aufrufen lassen.

                  wenn du die obejktreferenz mittels JS ermittelst, ...

                  Das ist ja der Punkt. Wie kann eine Referenz auf tr.style ermittelt werden, wenn das Objekt tr und eine Variable mit Inhalt 'style' als String gegeben sind.

                  var x = 'style'
                  tr.x.weitere_eigenschaft = ...

                  soll dann während der Laufzeit in tr.style.weitere_eigenschaft aufgelöst werden soll.

                  Meine bisherige Lösung für solche Fälle war eval('tr.' + x + '.weitere_eigenschaft')

                  (Inwieweit das Beispiel inhaltlich sinnvoll ist oder nicht soll mal dahingestellt bleiben.)

                  echo "$verabschiedung $name";

                  1. Das ist ja der Punkt. Wie kann eine Referenz auf tr.style ermittelt werden, wenn das Objekt tr und eine Variable mit Inhalt 'style' als String gegeben sind.

                    var x = 'style'
                    tr.x.weitere_eigenschaft = ...

                    soll dann während der Laufzeit in tr.style.weitere_eigenschaft aufgelöst werden soll.

                    tr[x].weitere_eigenschaft = ...

                    Meine bisherige Lösung für solche Fälle war eval('tr.' + x + '.weitere_eigenschaft')

                    eval ist evil!

                    Struppi.

                    1. echo $begrüßung;

                      Meine bisherige Lösung für solche Fälle war eval('tr.' + x + '.weitere_eigenschaft')

                      eval ist evil!

                      Wenn du mir jetzt noch erklärst/verlinkst, was, unter der Voraussetzung dass der Inhalt von x aus einer vertrauenswürdigen Quelle stammt / überprüft ist, an dem Konstrukt evil ist...

                      echo "$verabschiedung $name";

                      1. hi,

                        Wenn du mir jetzt noch erklärst/verlinkst, was, unter der Voraussetzung dass der Inhalt von x aus einer vertrauenswürdigen Quelle stammt / überprüft ist, an dem Konstrukt evil ist...

                        auch die vertrauenswürdige quelle selbst kann fehler machen, die dann ungeahnte auswirkungen haben können.
                        außerdem erschwert per eval ausgeführter code das debugging ziemlich.

                        gruß,
                        wahsaga

                        --
                        /voodoo.css:
                        #GeorgeWBush { position:absolute; bottom:-6ft; }
                      2. Meine bisherige Lösung für solche Fälle war eval('tr.' + x + '.weitere_eigenschaft')

                        eval ist evil!

                        Wenn du mir jetzt noch erklärst/verlinkst, was, unter der Voraussetzung dass der Inhalt von x aus einer vertrauenswürdigen Quelle stammt / überprüft ist, an dem Konstrukt evil ist...

                        Natürlich ist JS nicht so gefährdet wie andere Sprachen. Trotzdem ist evil in fast allen Fällen wo es üblicherweise eingesetzt wird überflüssig, erheblich langsamer, erschwert die Fehlersuche und führt in manchen Browser zu häufigen Abstürzen (zugegeben Netscape 4 ist nicht mehr so verbreitet). Und warum sollte man etwas einsetzen was eigentlich nur Nachteile hat, es ist noch nicht mal kürzer (manche sparen ja an jedem Byte)

                        Struppi.