2011-04-18 3 views
16

Pour une raison quelconque, je ne peux pas capturer la combinaison "SHIFT + TAB". J'utilise la dernière version de jQuery.JavaScript ne peut pas capturer la combinaison "SHIFT + TAB"

même résultat si j'utiliser d'autres ajax/javascript, etc.

Voici un exemple simple qui devrait fonctionner comme je comprends actuellement il ...

event.which ou event.keyCode sont toujours " undefined » ne shiftKey existe dans un scénario impliquant une « SHIFT + tAB » ou traversal du clavier vers l'arrière, traditionnellement inhérente aux fenêtres à base de apps/web ou autre ...

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; 
     } 
    } 

cela semble être encore un autre élément lié à l'onglet ordre qui ne fonctionne plus comme tradition allié a travaillé dans des applications basées sur Microsoft.Net WinForm/WebForm.

+2

Si cette question est complète, vous devez accepter une réponse :) – Eli

Répondre

30

Si vous utilisez jQuery, cela devrait être le fonctionnement du code. Assurez-vous que keyCode est en minuscules. En outre, jQuery normalise keyCode dans which:

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

Si vous êtes en JavaScript laconique:

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

jQuery 1.7+ on syntaxe:

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

Cela ne fonctionnera pas toujours, je veux dire, avec le clavier. Et c'est parce que, par exemple, j'ai d'abord laissé tomber l'onglet de décalage. Donc, cela retournera 9 et false, parce que la touche tab est enfoncée mais que shift ne l'est pas. Si vous laissez aller d'abord de l'onglet, alors c'est ok. Mais avec le clavier, cela fonctionnera, parce que vous appuyez sur la touche et avez déjà appuyé sur le bouton. – bokkie

+0

Cela ne fonctionne pas pour moi indépendamment de l'ordre que je libère 'tab'. Je ne sais pas pourquoi mon code ne reconnaîtra pas la touche 'shift' en conjonction avec 'tab' – CIA

+0

@CIA Je pense que bokkie vous a eu dans sa réponse. Mais fondamentalement onKeyUp se déclenche deux fois, une fois pour chaque touche (Shift et Tab). Le gestionnaire d'événements par défaut n'a aucune idée que SHIFT est en quelque sorte spécial - c'est juste une autre clé. Vous devez vérifier l'événement sur KeyDown ou KeyPress afin que vous puissiez vérifier SHIFT pendant que l'onglet est enregistré. – RoboBear

0

J'ai créé une fonction que je câblé jusqu'à l'événement onkeydown de mon bouton. Je onkeydown, parce que onkeypress ne capterait pas mon onglet appuyer sur la touche

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; 
       } 
     } 

J'ai pris cette approche pour faire face à deux problèmes spécifiques:

  1. onkeypress ne capture onglet presse clé
  2. Lorsque clic changement -tab, la touche Maj enfoncée déclenchait la fonction, donc je devais imbriquer le modificateur de touche shift vérifier
0

utiliser le même code à l'intérieur de l'événement keypress. l'onglet modifie l'élément entre la touche et le bouton. ici nous obtenons event.key = tab et event.shiftKey = true.

Questions connexes