Empêchez-vous que l'action d'événement par défaut ne fonctionne pas …?

J'essaie d'ajouter des raccourcis clavier sur mon site Web pour faciliter la navigation grâce au clavier. Je me heurte à un petit problème avec ma tentative de raccourci Alt + X. L'événement fonctionne très bien et renvoie false comme il se doit, mais le menu Fichier du navigateur apparaît indépendamment. J'ai également essayé la méthode preventDefault , mais pas de changement.

La version découpée du script est:

 document.documentElement.onkeydown = function(e) { e = e || window.event; switch( e.keyCode || e.which) { // some cases here - most notably: case 116: // F5 key if( activeFrame) { activeFrame.contentWindow.location.reload(); // reloads an iframe if one is active return false; } break; // more cases... case 88: // X key if( e.altKey) { // do something return false; } } } 

Comme indiqué ci-dessus, la priorité sur l'action par défaut de la touche F5 fonctionne très bien: le navigateur recharge la page uniquement si aucun iframe n'est actif. Je ne vois pas comment empêcher le menu d'apparaître lorsque vous appuyez sur Alt + X.

J'ai effectivement une application Web fonctionnant très bien avec les touches de raccourci CTRL, mais j'ai décidé que je serais intelligent et que j'utiliserais l'attribut accesskey , et j'ai rencontré ce problème avec IE.

Le problème avec les touches de raccourci CTRL est que beaucoup sont plus standard / utiles dans de nombreuses applications (par exemple: couper, copier, coller, sélectionner tout).

Ctrl + Alt est assez sûr, mais nécessite plus de travail sur la partie de l'utilisateur.

J'ai tendance à essayer de m'adapter aux raccourcis ALT IE n'insiste pas obstinément sur la gestion.

Démonstration de CTRL + A / CTRL + F annulée avec succès: http://jsfiddle.net/egJyT/

Cette réponse semble impliquer qu'il n'est pas possible de désactiver les raccourcis de menu sans mettre IE dans le mode kiosque.

Utiliser stopPropagation(e); Au lieu d' preventDefault méthode par preventDefault

 function stopPropagation(e) { e = e || event;/* get IE event ( not passed ) */ e.stopPropagation? e.stopPropagation() : e.cancelBubble = true; } 

Lien de référence

Une autre question SO qui mentionne que preventDefault a un problème dans IE.

METTRE À JOUR

Essayez d'utiliser le code ci-dessous conformément à la référence MSDN

 event.returnValue=false; 

Et un certain point de Détection des frappes de touche

Quelques réserves générales:

  • Généralement, Mac est moins fiable que Windows et certaines clés ne peuvent pas être détectées.
  • Explorer ne déclenche pas l'événement de touche pour supprimer, fin, entrer, échapper, touches de fonction, accueil, insertion, pageUp / Bas et onglet.
  • Onkeypress, Safari donne des valeurs de KeyCode bizarres dans la gamme 63200 pour supprimer, fin, touches de fonction, home et pageUp.Down. Les valeurs onkeydown et -up sont normales.
  • Alt, Cmd, Ctrl et Shift ne peuvent pas être détectés sur Mac, sauf dans Opera. Toutefois, vous pouvez toujours utiliser les propriétés altKey, ctrlKey et shiftKey.

Attention, si vous réussissez à empêcher le navigateur de détecter une combinaison de touches, vous pouvez rendre votre page inutilisable pour certains utilisateurs. Beaucoup de lecteurs d'écran ont réservé presque toutes les clés que vous pouvez considérer pour contrôler le lecteur d'écran et si votre page était accessible à l'aide d'un lecteur d'écran avant d'ajouter le code de la touche de raccourci, il se peut que ce soient des utilisateurs totalement inaccessibles qui ont besoin de lecteurs d'écran après l'avoir ajouté .

Lisez cet article sur les clés d'accès (un peu vieux mais probablement encore pertinent) et cet article sur les Combinaisons de frappe réservées avant d'investir trop de temps sur ce problème.