Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs

Estas en el tema de Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs en el foro de Jquery en Foros del Web. Buenas a todos. El título ya lo dice todo, intento conseguir que, de alguna manera, quede inhabilitado la pulsación de una tecla concreta mientras el ...
  #1 (permalink)  
Antiguo 13/06/2016, 03:34
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años, 7 meses
Puntos: 2
Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs

Buenas a todos.
El título ya lo dice todo, intento conseguir que, de alguna manera, quede inhabilitado la pulsación de una tecla concreta mientras el foco no esté en un input.
El problema es que algunos usuarios me han reportado que cuando están rellenando un formulario en la página, pulsan el botón retroceso sin estar en un input, y por tanto el navegador les devuelve a la página anterior y pierden todo lo que habían rellenado.
El objetivo por tanto es lograr que si se pulsa la tecla retroceso, y el foco no está en un input o textarea, ignore esa pulsación para evitar volver a la página anterior.
Hasta donde he podido averiguar, he de capturar las pulsaciones del teclado, compararlo a la tecla que quiero "ignorar" y en caso de coincidir mirar si el foco está en un input o no, pero es justo esto lo que no adivino a cómo hacerlo.
  #2 (permalink)  
Antiguo 13/06/2016, 15:14
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs

Tendrías que trabajar con el evento keydown que es el primer de los tres eventos que se disparan cuando se pulsa una tecla; luego, capturas al elemento activo del documento, a los elementos del formulario y al código de la tecla pulsada. A continuación, comprueba que el código sea igual a 8 (el de la tecla de retroceso) y que el elemento activo no sea un elemento hijo del formulario (en el ejemplo, utilicé una instancia del método Array.prototype.indexOf()); de ser así, evitas que se produzca el comportamiento natural del evento y listo.

Código Javascript:
Ver original
  1. document.addEventListener("keydown", function(event){
  2.     var formularioHijos = document.querySelector("#id del formulario").elements, //Elementos del formulario
  3.         elementoActivo = document.activeElement; //Elemento activo en el documento
  4.  
  5.     if (event.which == 8 && [].indexOf.call(formularioHijos, elementoActivo) < 0){
  6.         event.preventDefault();
  7.     }
  8. }, false);

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 13/06/2016, 20:11
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 9 años
Puntos: 39
Respuesta: Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs

Puedes añadir también el unbind.

Código Javascript:
Ver original
  1. $(window).bind('beforeunload', function(){
  2.             return true;
  3.         });

Y cuando el usuario clickee en el botón que envia el form ponerlo en falso.

Código Javascript:
Ver original
  1. $(window).unbind('beforeunload');

Esto lo que hace es poner la tipica alerta de ¿Seguro quieres salir?

Saludos
  #4 (permalink)  
Antiguo 14/06/2016, 04:08
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años, 7 meses
Puntos: 2
Respuesta: Prevenir el uso de una tecla concreta cuando el foco está fuera de inputs

Mil gracias rodocoyote15 y Alexis88.
Ambos casos me van al pelo, cada uno para cosas distintas, pero me vienen estupendos.
He adaptado ambos códigos y todo va de maravilla :)

Algún día el karma os devolverá todo esto que nos dáis a los que somos "lentitos" en programación jeje

Etiquetas: foco, input
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:03.