2012-06-23 8 views
5

Tengo una entrada en una página HTML donde una persona escribirá algo y lo que quiero es que se llame a una función cada vez que dejen de escribir. Sé sobre el evento onkeypress, pero se llama cada vez que se escribe un caracter. He aquí un ejemplo de lo que me gustaría:¿Cómo puedo llamar a una función después de que una persona deja de escribir?

  1. tipos persona "esto es una prueba" en la entrada
  2. vez que la persona deja de escribir, la función foo() debe ser llamado
  3. tipos de persona alguna otra cosa en la entrada
  4. vez que la persona deja de escribir, función foo() debe ser llamado
  5. Repita ....

Es esto posible?

¡Muchas gracias!

+7

Definir "persona detenida escribiendo" ... – Oded

+2

puede manejar el mouseup del evento de pérdida de foco. Pero no la persona deja de escribir –

+0

@Oded - Como en el tipo "esto es una prueba", luego deja de presionar las teclas del teclado. Entonces debería haber tal vez un segundo retraso. – Nate

Respuesta

10

Escucha onkeyupevent. Empieza un tiempo de espera (debe definir "detener" como una cantidad de tiempo, de lo contrario se invocará en cada tecla) y en el tiempo de espera ejecutar su función.

Si se llama onkeydown mientras el temporizador está en funcionamiento, deténgalo.

Algo así como ...

var timer; 

function onKeyUpHandler(e){ 
    timer = setTimeout("foo()", 500)  
} 

function onKeyDownHandler(e) { 
    clearTimeout(timer); 
} 

¿Cómo se ve exactamente este código depende de dónde y cómo se está utilizando ... sólo para mostrar la manera de hacerlo.

+0

Ixx - Gracias, esto es genial, pero parece que no puedo hacer que funcione: http : //jsfiddle.net/j35ba/ – Nate

+0

dame un segundo, lo comprobaré – Ixx

+0

¡ah, el nombre de las funciones es incorrecto! porque las funciones que los llaman tienen los mismos nombres, por lo que los llaman de nuevo hasta que obtiene el error de pila excedida. cambiar los nombres de las funciones. – Ixx

0

Simplemente configure un temporizador javascript para iniciar/reiniciar en onKeyPress. Luego, solo defina cuánto tiempo define "deja de escribir" y ejecute su secuencia de comandos.

0

Primero, capture el evento "clave arriba" y establezca una variable "stoppedTyping" en verdadero. A continuación, configure un temporizador (cuánto tiempo desea esperar antes de considerar este evento como "dejó de escribir").

Si, antes de que suene la alarma, se captura una "tecla abajo" del evento, ajustar "stoppedTyping = false"

Cuando el temporizador se expira, su devolución de llamada temporizador puede comprobar el valor de "stoppedTyping". Si es verdad, entonces el usuario ha dejado de escribir (o más precisamente, no ha escrito ningún carácter nuevo durante la duración de su temporizador). Si es falso, no han dejado de escribir; deben haber escrito al menos un carácter más mientras el temporizador estaba en funcionamiento.

0

Si lo entiendo bien, "dejar de escribir" significa "no presionar teclas durante un cierto período de tiempo". En este caso, debe usar los temporizadores: http://jsfiddle.net/xnghR/1/

Cuestiones relacionadas