2009-03-29 24 views
22

Tengo un formulario con <input type=text /> y quiero llamar a una función javascript después de 5 segundos de presionar la última tecla, y cada vez que se presiona una nueva tecla, este temporizador reinicie y solo llame a la función después de 5 segundos.Llamar a una función javascript después de 5 segundos de la última tecla

¿Cómo puedo hacer esto?

Estoy usando jQuery.

gracias!

+0

Qué quiere decir la última tecla presionada cuando el usuario tiene el campo de entrada activa en ese momento? –

Respuesta

54

Algo como esto debería empezar:

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

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

eso es increíble, gracias! – Paulo

+0

Solo recuerde que la función de tiempo de espera funciona en milisegundos. Es por eso que usó 5000. –

+4

Técnicamente, la configuración de nulo es superflua. – cletus

0

A pesar de que no utiliza jQuery, también se puede echar un vistazo a la función de supresión de rebotes describe here.

Steve

4

Esto es muy bueno, pero recuerda que es necesario tener el código después de que las cargas de documentos y después de las cargas de función para borrar el tiempo de espera.

Aquí está el código 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 
} 
Cuestiones relacionadas