2012-06-13 21 views
8

Hola he configurado un texto de entrada de autocompletar. Estoy tratando de disparar el evento de volver a imprimir la tabla al hacer clic en un btn y al presionar la tecla enter. el BTN clic funciona bien y pero la pulsación de tecla entrar parece que salta varias veces antes parando (es decir, la tabla destelle)jquery keypress event disparando un par de veces

$('body').bind('keypress', function(e) { 
     if(e.keyCode==13){ 
      var str = $('#Filter').val(); 
      $('#Table').fadeOut("slow").load('printShorts.server.php?Sortby=<?echo $sort;?>&dir=<?echo $direction;?>&filter='+encodeURIComponent(str)+'&usergroup=<?=$usergroup?>&no-cache=' + (new Date()).getTime()).fadeIn("slow"); 
     } 

}); 

no sucede todo el tiempo y actúa differntly en los navegadores diferentes personas ..

Respuesta

12

el evento KeyDown en combinación con un cuadro de texto HTML no ser suficiente para evitar que sea disparado varias veces. Puede ver este comportamiento en acción en la sección de demostración de jquery del evento de selección: http://api.jquery.com/keydown/

Una posible solución es usar el manejador de eventos "uno" (consulte http://api.jquery.com/one/). Que asegura el evento que se maneja solamente una vez:

jQuery("#createNewProduct").one("keydown", function (e) { 
    //Do Stuff 
}); 
+8

gracias, buena (¿entendido?:-)) – devmonster

+1

veo lo que hiciste allí – Dishcandanty

+0

Ahhhh ... Ases! ¡Esto me estaba volviendo loco! – JustBaron

4

http://api.jquery.com/keypress/

el evento de pulsación de tecla se envía a un elemento cuando el navegador se registra la entrada de teclado. Esto es similar al evento keydown, excepto en el caso de repeticiones de tecla. Si el usuario presiona y mantiene presionada una tecla, se desencadena un evento de tecla una vez, pero se activan eventos separados de pulsación de tecla para cada carácter insertado. Además, las teclas modificadoras (como Shift) desencadenan eventos de pulsación pero no eventos de pulsación de teclas.

Use la tecla en su lugar.

7

Este es el comportamiento correcto del evento de pulsación de teclas. El evento de pulsación de teclas continúa disparando mientras la tecla esté presionada (como si mantuviera presionada alguna tecla de caracteres cuando está en un área de texto, el carácter se agrega muchas veces, esto se relaciona con la pulsación de teclas). Para las condiciones de manejo una vez, use el evento de teclado o teclado dependiendo de sus requisitos. Tanto el teclado como la tecla se activan solo una vez. Funciona como:

{Key-Down} {Key-Press} {Key-Press} ..(as long as key is down).. {Key-Press} {Key-Up} 
1

Intente cambiar 'keypress' por 'keydown'.

El evento de pulsación de tecla se envía a un elemento cuando el navegador registra la entrada del teclado. Esto es similar al evento keydown, excepto en el caso de repeticiones de teclas. Si el usuario presiona y mantiene presionada una tecla, se desencadena un evento de pulsación una vez, pero se activan eventos de pulsación de tecla separados para cada carácter insertado.

De http://api.jquery.com/keypress/

1

La documentación de los estados de pulsación de teclas:

Como el método .keypress() es sólo una forma abreviada de .on ("pulsación de tecla", handler), la separación es posible usando .off ("presionar tecla").

Por lo tanto, puede separar el controlador agregando .off() antes de su encuadernación. También reemplazaría la función .bind() por .on() ya que el enlace ahora está en desuso. Algo como esto debería funcionar:

$('body').off().on('keypress', function(e) { 
Cuestiones relacionadas