2011-05-13 11 views

risposta

57

È possibile utilizzare setTimeout per questo:

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

esempio:

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

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

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

setTimeout pianifica una funzione da eseguire (una sola volta) dopo un intervallo. Il codice che la chiama continua, e ad un certo punto nel futuro (dopo circa il tempo specificato, anche se non precisamente) la funzione viene chiamata dal browser.

Supponiamo quindi di avere una funzione denominata output che aggiunge testo alla pagina. L'uscita 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):

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

Nota la seconda linea di questo. Il resto del codice di foo viene eseguito prima di una delle funzioni pianificate e quindi vediamo la riga D prima della riga B.

setTimeout restituisce un handle (che è un numero diverso da zero) si potrebbe usare 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 la relativa setInterval/clearInterval che fa la stessa cosa, ma più volte nell'intervallo specificato (fino a quando non lo si interrompe).

4

È possibile utilizzare la funzione setTimeout. Penso che la sintassi sia

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

Per parafrasare il Dalai Lama: Non usare mai stringhe con 'setTimeout' se puoi evitarlo. Puoi sempre evitarlo. –

+1

Lui è un uomo saggio, quel Lama ragazzo – Gareth

+0

Lui è il più saggio :) Hai ragione, avrei dovuto mettere un disclaimer su come inserire il codice js nelle stringhe. – Jad

1

Non è possibile "ritardare" in JavaScript senza bloccare il browser; l'utente non può spostare il mouse o fare clic su qualsiasi cosa (indesiderabile per 3+ secondi!).

Invece, si dovrebbe guardare a stabilire un timeout, che eseguirà designato codice 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 ciò sono che si passa a una funzione di riferimento oa una stringa (che dovrebbe essere comunque evitata), come primo parametro, con il secondo parametro che specifica quanti millisecondi il codice deve essere ritardato.

2

Se il ritardo è sempre lo stesso (3s nel tuo esempio), si può evitare il codice nidificato 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); 
Problemi correlati