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.
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:
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.