Ralf: Fehler im Script bei wiederholtem Funktionsaufruf

Beitrag lesen

Hallo

ich möchte mit DHMTL ein Div per Tastatur (Pfeiltasten) steuern. Um nicht noch eine fats identische Funktion schreiben zu müssen möchte ich die aufgerufene Funktion nach einem setTimeout erneut aufrufen ihr aber diesmal einen Parameter übergeben. Beispiel:

function moving(k) {
if(window.event.keyCode == 38 || k == 38)
  {
  guy.style.top = (guy.offsetTop - steps);
  window.setTimeout("moving(38)", 1000);
  }
}
Jedoch wird nach einer einer Sekunde ein Fehler verursacht. IE (6.0) meldet dann "Objekt erforderlich". Woran mag das liegen!?
Ich habe es auch schon mit 2 Funktionen versucht die fats identisch sind, wobei die eine Funktion jedoch die andere aufruft und umgekehrt. Dort hat es funktioniert :|

hier mein Quellcode

<html>
<head>
<title>Test</title>
<script language="Javascript" type="text/jscript">
<!--

var guy;
var guyX = 150, guyY = 150;
var steps = 1;
var speed = 100;

function moving(k) {
guy = eval(document.getElementById("Guy"));
guy.style.position = "absolute";
if(window.event.keyCode == 38 || k == 38)
  {
  guy.style.top = (guy.offsetTop - steps);
  window.setTimeout("moving(38)", speed);
  }
if(window.event.keyCode == 40 || k == 38)
  {
  guy.style.top = (guy.offsetTop + steps);
  window.setTimeout("moving(40)", speed);
  }
if(window.event.keyCode == 37 || k == 37)
  {
  guy.style.left = (guy.offsetLeft - steps);
  window.setTimeout("moving(37)", speed);
  }
if(window.event.keyCode == 39 || k == 38)
  {
  guy.style.left = (guy.offsetLeft + steps);
  window.setTimeout("moving(39)", speed);
  }
}
document.onkeydown = moving;
//-->
</script>
</head>

<body>
<div id="Guy" style="width:50px;height:50px;background:#ff8800"></div>
</body>
</html>

Desweiteren interessieren mich noch 2 Dinge:

1. Warum geht es nicht bei der Zeile mit "document.onkeydown = moving;", wenn ich den Funktionsaufruf moving mit einer klammer abschliesse? Sprich
document.onkeydown = moving();

2. Als ich es vorhin mit den 2 Funktionen getestet hatte und dabei das Div mit den Pfeiltasten in verschiedene richtungen steuerte, war bemerkbar, dass logischerweise die sich ständig wieder aufrufenden funktionen sich stets addiert haben. dabei haben ich nenne es mal "verschiedene Kräfte" aufeinander gewirkt die das Div zum rütteln brachten. Wie könnte ich (wenn ich die Richtung ändere) vorhergehende setTimeout() abbrechen. Gibt es noch eine Möglichkeit die setTimeouts irgendwie zu benennen oder zu finden damit ich später sagen kann "wenn ich nach rechts steuere, brich mir alle setTimeouts ab denen ich den Parameter 37 übergeben habe?!

Danke schonmal für eure (evtl) Hilfe :)