it-swarm.com.de

So verzögern Sie die Ausführung zwischen den folgenden in meinem Javascript

Ich möchte die Ausführung zwischen den folgenden Codes verschieben:

$("#myName").val("Tom");
///delay by 3s
$("#YourName").val("Jerry");
//delay by 3s

$("#hisName").val("Kids");
29
learning

Sie können dafür setTimeout verwenden:

setTimeout(function() {
    // Your code here
}, delayInMilliseconds);

Z.B.:

$("#myName").val("Tom");

/// wait 3 seconds
setTimeout(function() {
    $("#YourName").val("Jerry");

    /// wait 3 seconds
    setTimeout(function() {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

setTimeout legt fest, dass eine Funktion nach einem Intervall (einmalig) ausgeführt wird. Der Aufruf des Codes wird fortgesetzt, und zu einem späteren Zeitpunkt (nach ungefähr der von Ihnen angegebenen Zeit, wenn auch nicht genau) wird die Funktion vom Browser aufgerufen.

Nehmen wir also an, Sie hätten eine Funktion namens output, die Text an die Seite anfügt. Die Ausgabe von diesem:

foo();
function foo() {
    var counter = 0;

    output("A: " + counter);
    ++counter;
    setTimeout(function() {
        output("B: " + counter);
        ++counter;
        setTimeout(function() {
            output("C: " + counter);
            ++counter;
        }, 1000);
    }, 1000);
    output("D: " + counter);
    ++counter;
}

... ist (nach ein paar Sekunden):

A: 0 
 D: 1 
 B: 2 
 C: 3

Beachten Sie die zweite Zeile davon. Der Rest des Codes von foo wird vor einer der geplanten Funktionen ausgeführt. Daher wird die Zeile D vor der Zeile B angezeigt.

setTimeout gibt ein Handle zurück (eine Zahl ungleich Null), mit dem Sie den Rückruf abbrechen können, bevor dies geschieht:

var handle = setTimeout(myFunction, 5000);
// Do this before it runs, and it'll never run
clearTimeout(handle);

Es gibt auch das zugehörige setInterval/clearInterval, das dasselbe tut, jedoch wiederholt in dem von Ihnen festgelegten Intervall (bis Sie es anhalten).

65
T.J. Crowder

Sie können die Funktion setTimeout verwenden. Ich denke die Syntax ist

window.setTimeout('$("#YourName").val("Jerry")',3000);
4
Jad

Wenn die Verzögerung immer gleich ist (3s in Ihrem Beispiel), können Sie verschachtelten Code vermeiden und setInterval anstelle von setTimeout verwenden:

var i
  , ids = ["myName", "YourName", "hisName"]
  , names = ["Tom", "Jerry", "Kids"];

i = setInterval(function () {
    if (ids.length > 0) {
        $("#" + ids.shift()).val(names.shift());
    } else {
        clearInterval(i);
    }
}, 3000);
2
nilfalse

Sie können in JavaScript nicht "verzögern", ohne den Browser zu sperren. der Benutzer kann seine Maus nicht bewegen oder auf etwas klicken (unerwünscht für mehr als 3 Sekunden!).

Stattdessen sollten Sie ein Timeout festlegen, das in Zukunft bestimmten Code ausführt ...

$("#myName").val("Tom");
setTimeout(function () {
    $("#YourName").val("Jerry");

    setTimeout(function () {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

Sie können die Dokumentation für setTimeout hier auschecken: https://developer.mozilla.org/en/window.setTimeout . Die Grundlage ist, dass Sie als ersten Parameter entweder eine Funktionsreferenz oder eine Zeichenfolge (die jedoch vermieden werden sollte) übergeben. Der zweite Parameter gibt an, um wie viele Millisekunden der Code verzögert werden soll.

2
Matt