2011-04-18 33 views
16

Por alguna razón no puedo capturar la combinación "MAYÚS + TAB". Estoy usando la última jQuery.JavaScript no puede capturar la combinación "SHIFT + TAB"

mismo resultado si uso otra Ajax/JavaScript, etc.

Aquí está un ejemplo sencillo que debería funcionar como actualmente lo entiendo ...

event.which o event.keyCode son siempre " "sólo existe shiftKey en un escenario en el que un 'indefinido SHIFT + TAB' o recorrido del teclado hacia atrás, tradicionalmente inherente basado en windows aplicaciones/web o de lo contrario ...

function ShiftTab() 
    { 
     debugger; 
     if(event.KeyCode == 9 && event.shiftKey) // neither this line nor the following work 
//  if (event.which == 9 && event.shiftKey) // shift + tab, traverse backwards, using keyboard 
     { 
     return true; 
     } 
     else 
     { 
     return false; 
     } 
    } 

esto parece ser otro tema relacionado con la pestaña orden que ya no funciona como lo hace la tradición ally trabajó en aplicaciones basadas en WinForm/WebForm de Microsoft.Net.

+2

Si se completa esta pregunta, debe aceptar una respuesta :) – Eli

Respuesta

30

Si está utilizando jQuery, así debería ser el funcionamiento del código. Asegúrese de que keyCode esté en minúscula. Además, jQuery normaliza keyCode en which:

$(document).keyup(function (e) { 
    if (e.which === 9 && e.shiftKey) { 
     ShiftTab(); 
    } 
}); 

Si estás en la escueta JavaScript:

$(document).keyup(function (e) { 
    e.which === 9 && e.shiftKey && ShiftTab(); 
}); 

jQuery 1.7+ on sintaxis:

$(document).on('keyup', function (e) { 
    e.which === 9 && e.shiftKey && ShiftTab(); 
}); 
+2

Esto no siempre funcionará, quiero decir, con la función de teclado. Y eso es porque, por ejemplo, primero dejo ir la pestaña de cambio. Entonces devolverá 9 y falso, porque se presiona la tecla tab, pero el desplazamiento no. Si deja ir primero de la pestaña, entonces está bien. Pero con la tecla de ajuste funcionará, porque presionas la tecla tab y tienes el cambio ya presionado. – bokkie

+0

Esto no funciona para mí, independientemente del orden que publique 'tab'. No estoy seguro de por qué mi código no reconocerá la tecla 'shift' presionada junto con 'tab' – CIA

+0

@CIA Creo que bokkie lo consiguió en su respuesta. Pero básicamente onKeyUp dispara dos veces, una para cada tecla (Shift y Tab). El controlador de eventos de forma predeterminada no tiene idea de que SHIFT sea de alguna manera especial; es solo otra clave. Debe verificar el evento en KeyDown o KeyPress para que pueda verificar si hay MAYÚS mientras se registra la pestaña. – RoboBear

0

he creado una función que Telegrafié hasta el evento onkeydown de mi botón. Solía ​​onkeydown, porque onkeypress no captaría mi cuenta pulsación de tecla

function ShiftTab(evt) { 
     var e = event || evt; // for trans-browser compatibility 
     var charCode = e.which || e.keyCode; // for trans-browser compatibility 

     if (charCode === 9) { 
      if (e.shiftKey) { 
       $('#controlName').focus(); 
       return false; 
      } else { 
        return true; 
       } 
     } 

Tomé este enfoque para hacer frente a dos problemas específicos:

  1. onkeypress no capturaría pestaña Pulse la tecla
  2. Cuando clic turno -tab, presionar la tecla shift activaría la función, así que tuve que anotar la verificación del modificador de la tecla shift
0

usar el mismo código dentro del evento keypress. la pestaña cambia el elemento entre la pulsación de tecla y la tecla. aquí obtenemos event.key = tab y event.shiftKey = true.

Cuestiones relacionadas