2011-10-17 6 views
11

Estoy capturando el valor de la tecla de presionar '191' para la barra diagonal (/) para una función en mi sitio. Funciona bien en todos los navegadores excepto en Firefox debido a su función de búsqueda rápida. El '191' todavía se registra y la acción se ejecuta (foco en un campo de entrada, texto de ayuda emergente), pero el foco va a la Búsqueda Rápida.Cómo eludir la función de búsqueda rápida de Firefox y capturar la barra inclinada presiona

Leí en otra pregunta de StackOverflow diciendo que Firefox captura la barra diagonal como código de carácter '0', pero que no hizo nada.

¿Hay alguna manera de ignorar la búsqueda rápida de Firefox y recuperar el control de la barra diagonal? Usando JavaScript y jQuery.

+2

Pregunte primero si ** debe ** hacer esto. Como regla general, pensaría dos veces (o más) antes de hacer algo que altere el comportamiento esperado del navegador sin el conocimiento y consentimiento del usuario. Hacerlo servirá principalmente para frustrar y alienar a esos usuarios. (Por supuesto, digo esto sin saber nada sobre su aplicación, tal vez tenga una buena razón para querer este comportamiento.) – eaj

+0

Su mejor opción será elegir una tecla de acceso directo diferente. Incluso si resuelve este problema hoy, no hay nada que diga que una nueva actualización de Firefox no lo rompa nuevamente. Lo mejor es evitar el conflicto por completo. –

+0

Hay otro caso en el que esto podría ser realmente necesario: si el usuario tiene habilitada la opción "Buscar texto cuando empiezo a escribir", la barra de búsqueda aparecerá con casi * cualquier * tecla presionada fuera de un cuadro de texto. – Herohtar

Respuesta

9

Acepto que es importante preguntarse si debe usar ese atajo. Sin embargo, si decides (como lo han hecho otros, ese es el atajo de búsqueda en Gmail), solo necesitas capturar el evento de keydown del documento (no keypress o keyup) y luego prevenir la acción predeterminada, que interceptará a tiempo para detener el comportamiento predeterminado de Firefox. Además, asegúrese de verificar que el usuario aún no esté escribiendo en un campo de texto. Aquí hay un ejemplo rápido:

$(document).keydown(function(e) { 
    var _target = $(e.target); 
    var _focused = $(document.activeElement); 
    var _inputting = _focused.get(0).tagName.toLowerCase()==="textarea" || _focused.get(0).tagName.toLowerCase()==="input"; 

    ///(forward slash) key = search 
    if (!_inputting && e.keyCode===191) { 
     e.preventDefault(); 
     $("#search-input").focus(); 
     return; 
    } 
}); 
+1

'e.preventDefault()' dentro del evento 'keydown' también funciona cuando el usuario tiene habilitada la opción" Buscar texto cuando empiezo a escribir "en Firefox. – Herohtar

Cuestiones relacionadas