Capturar evento clave para retroceso

Estoy teniendo dificultad para capturar la clave de retroceso como un evento de teclado en javascript / jQuery. En Firefox, Safari, Opera, Chrome y en el iPhone / iPad, captura un evento de teclado en un cuadro de entrada de texto como este:

$(id_input).keyup(function(event) { that.GetHints($(this).val().trim(), event, fieldName); }); 

Este evento captura las pulsaciones del usuario y luego las envía a una función para emitir una llamada de consulta ajax.

Mi problema viene cuando un usuario desea retroceder sobre un carácter él / ella mecanografió ya. En todos los navegadores a los que tengo acceso excepto para mi teléfono Droid, cuando presione la tecla de retroceso, este evento de keyup captura el valor devuelto por $ (this) .val (). Trim () y lo envía al proceso en la función GetHints. En el Droid, sin embargo, ni este keyup ni un evento keydown equivalente se desencadenan hasta que el usuario retroceda sobre cada carácter en $ (este).

Así, por ejemplo, si escribo "cu" y retrocedemos sobre "u" dejando sólo "c" en el campo de entrada, en todos los navegadores excepto Droid, el evento keyup se disparará y llamará a la función GetHints("c", event, fieldName) . En el Droid, el evento keyup nunca se dispara.

¿Qué me estoy perdiendo? ¿Cómo / por qué esta tecla de retroceso, en el teclado suave o en el teclado duro, en mi Droid no funciona como se esperaba? ¿Cómo puedo solucionar esto?

Podrías buscar cambios en el texto (usando setInterval ). Esto probablemente sería más confiable. Por ejemplo, keyup no se dispararía si el usuario hace clic con el botón derecho del ratón -> cortar. El sondeo por sí solo sería menos sensible, pero se podría combinar con keyup para mantenerlo rápido. Polling sería un poco más procesador pesado.

Intente algo en este sentido:

 var oldText = ''; var timer = setInterval(function(){ var text = $(id_input).val().trim(); if(text != oldText){ oldText = text; that.GetHints(text, fieldName); } }, 500); 

Ajuste la duración del intervalo según sea necesario.

No estoy seguro de lo que that.GetHints hace con el event , pero obviamente, no sería capaz de pasar que en el uso de la encuesta enfoque (porque no hay un evento real de ser despedido). ¿Es esto un problema?

Puede utilizar clearInterval(timer); Para detener el sondeo si lo desea.

Usted podría mantener su función existente de keyup como es (para aumentar la capacidad de respuesta). Alternativamente, es posible que desee hacer una encuesta para evitar that.GetHints ser llamado demasiado (por ejemplo, si alguien escribe algo en muy rápido).

  • PhoneGap + jQueryMobile: El botón de retroceso de Android cierra la aplicación en la lista anidada
  • Error de acceso denegado con jQuery
  • En el teléfono móvil, detecte cuándo el usuario se desplaza "pasado" en la parte superior de la pantalla
  • Chartv Donut desaparece
  • Detectar si la aplicación de Android se ha instalado en el dispositivo mediante una página web móvil: PHP y JS
  • JQuery preventDefault no funciona en el navegador predeterminado de android 4.4
  • ResponsiveVoice.js no funciona correctamente con el compilador Phonegap
  • El elemento <select> de HTML está abreviado en navegadores iPhone o Android
  • Cómo capturar clave de retroceso clave en el navegador Android - javascript?
  • ¿Cómo mejorar el rendimiento del sitio web en iPad / iPhone?
  • Deshabilitar la ayuda de ortografía en HTML para dispositivos móviles
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.