Come ritardare l’esecuzione, tra le seguenti, nella mia javascript

Voglio ritardare l’esecuzione in tra i seguenti codici:

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

$("#hisName").val("Kids");
InformationsquelleAutor learning | 2011-05-13

 

4 Replies
  1. 65

    È possibile utilizzare setTimeout per:

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

    E. g.:

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

    setTimeout pianificazioni di una funzione da eseguire (una volta) dopo un intervallo. Il codice di chiamata continua, e a un certo punto in futuro (dopo circa il tempo specificato, anche se non proprio) la funzione viene chiamato dal browser.

    Quindi suppongo che ha una funzione chiamata output che il testo aggiunto alla pagina. L’output di questo:

    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;
    }

    …(dopo un paio di secondi):

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

    Nota la seconda linea che. Il resto del foo‘s codice viene eseguito prima della prevista funzioni, e così vediamo la D linea prima che il B linea.

    setTimeout restituisce un handle (che è un numero diverso da zero) si potrebbe utilizzare per annullare la richiamata prima che accada:

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

    C’è anche il relativo setInterval /clearInterval che fa la stessa cosa, ma più volte a un intervallo specificato (fino a quando non si arresta).

  2. 4

    È possibile utilizzare la funzione setTimeout. Credo che la sintassi è

    window.setTimeout('$("#YourName").val("Jerry")',3000);
    • Per parafrasare il Dalai Lama: non usare Mai le stringhe con setTimeout se si può evitare. Si può sempre evitare.
    • Lui è un uomo saggio, che Lama ragazzo
    • Lui è il più saggio 🙂 Hai ragione, avrei dovuto mettere un disclaimer sull’inserimento di codice js in stringhe.
    • Perché non si possono mettere le virgolette? Che citazione stai parlando? Un avvolgimento jQuery blocco o?
    • Le virgolette indicano che stiamo passando una stringa javascript per setTimeout. T. J Crowder risposta di sopra di una funzione anonima è passato. Questo è un approccio ancora migliore. L’uso di una funzione è più leggibile e robusto, per esempio un errore di sintassi sarebbe rilevato subito. È possibile controllare le discussioni sulla eval dichiarazione per ulteriori informazioni.
  3. 2

    Non si può “ritardo” in JavaScript senza chiudere il browser; i.e l’utente non può spostare il mouse o fare clic su qualsiasi cosa (indesiderabili per 3 secondi!).

    Invece, si dovrebbe guardare l’impostazione di timeout, che eseguirà il codice designato po ‘ di tempo in futuro…

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

    È possibile controllare la documentazione per setTimeout qui: https://developer.mozilla.org/en/window.setTimeout. Le basi di questo è che si passa una funzione di riferimento, o una stringa (che dovrebbe essere evitato però), come primo parametro, con il secondo parametro specifica il numero di millisecondi che il codice deve essere ritardata per.

  4. 2

    Se il ritardo è sempre la stessa (3s nel tuo esempio), si può evitare di nidificati il codice e utilizzare setInterval invece di setTimeout:

    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);

Lascia un commento