2010-09-30 20 views
2

Le code suivant révèle un div sur un événement de pression de touche '?' (191). Fonctionne parfaitement avec Google Chrome, mais refuse de travailler avec Firefox. Des idées?La navigation au clavier de jQuery est interrompue sur Firefox

$(document).keyup(function (e) { 
    if(e.which == 16) isShift=false; }).keydown(function (e) { 

    if(e.which == 16) isShift=true; 

    if(e.which == 191 && isShift == true) { 
    if ($('#keyboard-shortcut-menu').css('display') == 'none') { 
     $('#keyboard-shortcut-menu').show(); 
    } else { 
     $('#keyboard-shortcut-menu').hide(); 
    } 

    return false; 
} 

MISE À JOUR: Cette figure a été déterminée. Firefox capture '?' char comme valeur 0. Consultez ma réponse ci-dessous.

Répondre

0

Ok, je l'ai. J'ai exécuté ce script sur la console Firefox:

$(document).keydown(function(e) { 
    console.log(e.which); 
}); 

Il semble que Firefox capture le '?' char comme valeur 0, tandis que Google Chrome capte comme

191.

a résolu le problème en ajoutant un code conditionnel:

if((e.which == 191 && isShift == true) || (e.which == 0 && isShift == true)) 

Merci pour tous les conseils de refactoring.

2

essayer avec

e.keyCode == XX 

oh, et vous pouvez utiliser e.shiftKey pour tester si "Shift" est pressée

$(document).keypress(function(e){ 
    if(e.keyCode==191 && e.shiftKey) 
    $('#keyboard-shortcut-menu').toggle(); 
    return false; 
}); 
+0

tnx, mais toujours brisé. –

+1

'keypress' &' keyCode' ne sont pas supportés dans Firefox (réf: http://www.quirksmode.org/js/keys.html), il est préférable d'utiliser 'e.which 'qui est normalisé dans jQuery. – Mottie

+0

@fudgey Dernière modification de la page il y a 2 ans ... il fonctionne en FF – IcanDivideBy0

1

je pense que vous manque une; ou} cos cela fonctionne dans FF:

$(function(){ 
    $(document).keyup(function (e) { 
      if(e.which == 16) isShift=false; 
    }).keydown(function (e) { 

      if(e.which == 16) isShift=true; 

      if(e.which == 191 && isShift == true) { 
       if ($('#keyboard-shortcut-menu').css('display') == 'none') { 
         $('#keyboard-shortcut-menu').show(); 
       } 
        else { 
         $('#keyboard-shortcut-menu').hide(); 
       } 

       return false; 
      } 
     }); 
    }); 

essayer le violon js ici: http://jsfiddle.net/q3d6S/1/

+0

Merci. Je vois maintenant le problème. Le violon que vous avez ajouté se brise également sur Firefox. Probablement une erreur locale sur mon installation. Je vais tester un peu plus sur cet angle. Merci! –

+0

Vous pouvez utiliser 'e.shiftKey' au lieu d'utiliser' e.which == 16' – Mottie

+0

oui, si ce code casse, il y a quelque chose de mal ailleurs, b/c j'ai couru cela dans IE, FF et Chrome :) – Patricia

0

Essayez cette (demo):

$(document).keyup(function(e){ 
    if (e.which == 191 && e.shiftKey == true) { 
     $('#keyboard-shortcut-menu').toggle(); 
    } 
});