guido bayer: Funktion mit setTimeout() blockieren?!

hi,

ich möchte wegen beim Aufruf einer onClick-Funktion eine onMouseOut-Funktion auf dem gleichen (href-)Bild für genau 4 Sekunden blockieren und versuche gerade, das mit setTimeout() zu machen.

im Moment so:

/*
var rollover = "1";

function blockiere() {
 rollover = "0";
 MM_swapImage('Play','','usw_pics/play_ani.gif',1);
 setTimeout("MM_swapImgRestore()",4000);
 rollover = "1";
}
*/

obwohl rollover den jeweils richtigen Wert hat, wird die Funktion "swapRestore()" nicht 4 sekunden lang blockiert.

was habe ich übersehen/falsch gedacht?

gruss,

guido

  1. Hallo Guido!

    setTimeout("MM_swapImgRestore()",4000);

    Hier liegt der Fehler. Bei deinem Skript gehst du davon aus, dass das Skript an dieser Stelle für 4 Sekunden anhält, dann deine Funktion im setTimeout aufruft, und dann die eigentliche Funktion fortsetzt. Der setTimeout-Befehl funktioniert aber leider ein bisschen anders. Er macht quasi einen Prozess-Split. Ein Prozess läuft hinter dem setTimeout weiter, führt also dein rollover="1"; aus und die Funktion ist damit beendet. Der zweite Prozess durchläuft die "Innerein" vom setTimeout, wartet also erstmal 4 Sekunden und führt dann die dort definierte Funktion auf.

    Ich hoffe, dass das einigermaßen verständlich erklärt war ;-)

    MfG,
    Mirko Hansen

  2. Hi,

    ich möchte wegen beim Aufruf einer onClick-Funktion eine onMouseOut-Funktion auf dem gleichen (href-)Bild für genau 4 Sekunden blockieren und versuche gerade, das mit setTimeout() zu machen.

    <script type="text/javascript">
    var onMouseoutBlocked = false
    function proceedOnClick() {...}
    function proceedOnMouseout() {
    if (onMouseoutBlocked == false) ...}
    </script>
    <a href="#" onClick="proceedOnClick();onMouseoutBlocked=true;window.setTimeout('onMouseoutBlocked=false',4000);return false" onMouseout="proceedOnMouseout()"><img ...></a>

    Salokin