2012-05-09 27 views
17

Estoy codificando un script simple para extraer información de la base de datos en el evento keyup de entrada.Keyup solo después de la última clave con jquery

El problema que tengo es que el evento de tecla siempre se repite cada vez que el usuario presiona una tecla. ¿Cómo puedo hacerlo funcionar solo después de presionar la última tecla?

Creo que debería usar una función como setTimeOut() después de cada tecla, pero no sé cómo ... ¿puedes hacerme un simple ejemplo, por favor?

Lo siento por mi mala Inglés :)

Esto es lo que estaba tratando de hacer:

$("input").keyup(function() 
{ 
    var timer=setTimeout(function() { 
    }, 1000); 
    if(!timer) 
    { 
     //do .post ajax request 
    } 
}); 

Respuesta

36
var timer; 

$("input").on('keyup', function() { 
    clearTimeout(timer); //clear any running timeout on key up 
    timer = setTimeout(function() { //then give it a second to see if the user is finished 
     //do .post ajax request //then do the ajax call 
    }, 1000); 
}); 
+0

¡excelente respuesta, gracias! – Zippie

6

que está básicamente allí. Solo necesita borrar el temporizador si ingresan otra letra; de lo contrario, la devolución de llamada se ejecutará después de los 1000 ms, independientemente de si siguen escribiendo.

Algo como esto debería funcionar:

$("input").keyup(function (event) 
{ 
    var self = this; 
    if (self.timer) 
     clearTimeout(self.timer); 

    self.timer = setTimeout(function() 
    { 
     self.timer = null; 
     alert(self.value); 
    }, 1000); 

}); 

donde acabo de alerta, que había puesto su código Ajax escribir de nuevo al servidor.

0

Creo que si haces esto con el evento onchange no es necesario que hagas comprobaciones de intervalo de tiempo. cada vez que complete su entrada y cambie el enfoque. desencadena evento de cambio para usted

$("input").onchange(function() 
{ 
    //extract database info 
} 
Cuestiones relacionadas