2009-03-29 19 views
22

Ho un modulo con un <input type=text /> e voglio chiamare una funzione javascript dopo 5 secondi dell'ultimo tasto premuto, e ogni volta che viene premuto un nuovo tasto, questo timer dovrebbe resettare e chiamare la funzione solo dopo 5 secondi.Chiamare una funzione javascript dopo 5 secondi dell'ultimo tasto premere

Come posso fare questo?

Sto usando jQuery.

grazie!

+0

vuoi dire l'ultima premuto quando l'utente ha il campo di inserimento attivo chiave? –

risposta

54

Qualcosa del genere dovrebbe iniziare:

var timeout; 
$('input[type=text]').keypress(function() { 
    if(timeout) { 
     clearTimeout(timeout); 
     timeout = null; 
    } 

    timeout = setTimeout(myFunction, 5000) 
}) 
+0

è fantastico, grazie! – Paulo

+0

Ricorda che la funzione di timeout funziona in millisecondi. Ecco perché ha usato 5000. –

+4

Tecnicamente l'impostazione su null è superflua. – cletus

0

Anche se non fa uso di jQuery, si potrebbe anche avere uno sguardo alla funzione di debouncing descritto here.

Steve

4

Questo è grande, ma ricordate che è necessario attivare questo codice dopo i carichi di documenti e dopo i carichi di funzione per cancellare il timeout.

Ecco il codice completo:

var timeout; 
$(document).ready(function(){ 
    $('input[type=text]').keypress(function() { 
     if(timeout) { 
      clearTimeout(timeout); 
      timeout = null; 
     } 
     timeout = setTimeout(myFunction, 5000); 
    }); 
}); 

var myFunction = new function() { 
    alert('myFunction is running'); 
    clearTimeout(timeout); // this way will not run infinitely 
} 
Problemi correlati