ingo b: eval wird nur einmal ausgeführt?

Hallo,

ich habe für meinen Informatik-Unterricht eine "Entwicklungsumgebung" für JavaScript programiert. Dabei wird in einer Textarea Code eingegeben, der dann per eval() innerhalb eines try-catch-Statements ausgeführt wird.

Zwei Fragen habe ich nun noch:

1. Ich würde gerne beim Benutzen der TAB-Taste nicht ins nächste Feld springen sondern den Cursor/Zeile einrücken. Kann man das irgenwie machen?

2. Ein einfaches Programm würde bei mir so aussehen:
//-------------------------------------------
new Knopf(10,10,"Drück mich","sagHallo()");

function sagHallo() {
    alert("Halloooooo ;-)");
}

sagHallo()
//-------------------------------------------

Es wird auch alles richtig gemacht, die Funktion sagHallo() wird ausführen einmal gemacht. Nur der Klick auf den Button (bei mir Knopf) geht nicht, da die Funktion "sagHallo()" nicht vorhanden ist. Ich nehme daher an, dass der js-Code beim eval nicht irgendwie gemerkt wird. Hat dafür jemand eine brauchbare Lösung?

Zum Testen:
http://ingo-bartling.de/info/klasse7/html/js_logo/codingarea_allg.html

  1. Hell-O!

    new Knopf(10,10,"Drück mich","sagHallo()");

    Wie sieht denn das Objekt "Knopf" aus? Was macht es mit dem Parameter "sagHallo()"?

    Es wird auch alles richtig gemacht, die Funktion sagHallo() wird ausführen einmal gemacht.

    Sie steht ja auch am Ende deines Codes, wird also einmal ausgeführt.

    Zum Testen:
    http://ingo-bartling.de/info/klasse7/html/js_logo/codingarea_allg.html

    Leider kann man deinen Code dort nicht testen, da Funktionen nicht erlaubt sind.

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Das Steuer-Blog | Siechfreds Tagebuch
    1. Hell-O Ingrid!

      Nachtrag: Javascript-Validator (ich liebe meine Bookmarks ;-) )

      Siechfred

      --
      Hier könnte Ihre Werbung stehen.
      Das Steuer-Blog | Siechfreds Tagebuch
    2. Wie sieht denn das Objekt "Knopf" aus? Was macht es mit dem Parameter "sagHallo()"?

      Das Objekt besteht im Wesentlichen aus folgender Zeile:

      var sResult = '<div id="'+this.divId+'" style="position:absolute;'+'left:' + x + 'px;'+'top:' + y + 'px;">'+'<input type="button" value="' + this.label + '" onClick="'+calledFunction+'">'+'</div>';
       document.write(sResult);

      Zum Testen:

      http://ingo-bartling.de/info/klasse7/html/js_logo/codingarea_allg.html

      Leider kann man deinen Code dort nicht testen, da Funktionen nicht erlaubt sind.

      Stimmt. Das hatte ich vorsichtshalber mal reingemacht. Jetzt ist es wieder draußen und kann getestet werden.

      Was meintest du eigentlich mit dem Link? Was sollte ich mit dem Tipp anfangen?

      1. Hell-O!

        var sResult = '<div id="'+this.divId+'" style="position:absolute;'+'left:' + x + 'px;'+'top:' + y + 'px;">'+'<input type="button" value="' + this.label + '" onClick="'+calledFunction+'">'+'</div>';
        document.write(sResult);

        Gut, du schreibst den HTML-Code für den Button in das Domument. Aber wo schreibst du den JS-Code für die Funktion "sagHallo()" hinein? Das eval() sorgt nur dafür, dass der Code evaluiert wird und gibt ein Ergebnis zurück, das war's. Der Code, den du reinschreibst, liefert als Ergebnis den HTML-Code für den Button, die Funktion "sagHallo" wird evaluiert, für gut befunden und verschwindet dann im eval-Nirvana.

        Was meintest du eigentlich mit dem Link? Was sollte ich mit dem Tipp anfangen?

        Mir gefällt die Variante, mittels eines function-Objektes JS-Code zu evaluieren, besser. Deshalb der Link.

        Siechfred

        --
        Hier könnte Ihre Werbung stehen.
        Das Steuer-Blog | Siechfreds Tagebuch