Markus: prompt Abfrage mit if zusatz verzögern

setTimeout("passwort=prompt('?','')",10000);

Wenn ich es so mache wird die Abfrage zwar um die gewünschte Zeit verzögert, aber die if,else Bedingungen klappen nicht mehr..

Es erscheint direkt die else Bedingung dann öffnet sich nach den 10 Sekunden das Eingabefenster aber die if Bedingung wird nicht ausgeführt da sie ja direkt abgelaufen ist..
Hier der komplette Code:

<script type="text/javascript">
var question;
setTimeout("passwort=prompt('?','')",4000);
if(passwort=="xy") {
location.href="two.htm";
}
else if(passwort=="XY") {
location.href="two.htm";
}
else {
alert("eek");
}
</script>

  1. Es erscheint direkt die else Bedingung dann öffnet sich nach den 10 Sekunden das Eingabefenster aber die if Bedingung wird nicht ausgeführt da sie ja direkt abgelaufen ist..

    Und? In finde in deinem Post keine Frage?!
    Aber bevor der Gunnar noch sauer auf mich wird, benutz ich mal meine Kugel.
    Die sagt mir: lass den Code nach dem prompt() auch um X Sekunden verzögert ausführen. Eine andere Möglichkeit ist mir nicht bekannt.

  2. n'abend,

    Es erscheint direkt die else Bedingung dann öffnet sich nach den 10 Sekunden das Eingabefenster aber die if Bedingung wird nicht ausgeführt da sie ja direkt abgelaufen ist..

    du hast das Problem erkannt. Eigentlich sollte die Frage »Was passiert, wenn ich meinen restlichen Code auch verzögert ausführe?« nicht mehr fern liegen.

    var question;
    setTimeout("passwort=prompt('?','')",4000);
    if(passwort=="xy") {
    location.href="two.htm";
    }
    else if(passwort=="XY") {
    location.href="two.htm";
    }
    else {
    alert("eek");
    }

    du möchtest zusammengehörenden Code Gruppieren. Das erreichst du prinzipiell dadurch, dass du ihn in eine Funktionsdeklaration packst. Das hat übrigens den angenehmen Vorteil, dass man das Stück Code mehrfach ausführen kann, wenn man möchte.

    function promptPasswort()  
    {  
      var pw = prompt( '?', '' );  
      switch( pw )  
      {  
        case 'xy':  
          location.href = 'foo.bar';  
        break;  
      
        case 'XY':  
          location.href = 'foobar.baz';  
        break;  
      
        default:  
          alert( 'eek' );  
        break;  
      };  
    }
    

    Diese Funktion kannst du nun jederzeit ausführen. Wenn kein korrektes Passwort angegeben wurde, sogar mehrfach.

    Um das ganze nun verzögert auszuführen, brauchen wir nur folgendes:
    window.setTimeout( promptPasswort, 10000 );

    promptPasswort ist nichts anderes als eine Referenz auf deine Funktion. Wir lassen die üblichen () weg, weil wir die Funktion nicht ausführen, sondern als Timeout registrieren wollen.

    Wenn du zwischen "XY" und "xy" unterscheiden möchtest, ist deine if-elseif-else Variante ebenso brauchbar, wie mein switch Vorschlag. Wenn du diesen Codeteil nur drin hast, damit du die Groß-/Kleinschreibung ignorieren kannst, möchtest du auf String.toLowerCase() hingewiesen worden sein.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|