Empêcher le comportement par défaut chez les principaux auditeurs de l'interface utilisateur

StackOverflow https://stackoverflow.com/questions/166127

  •  03-07-2019
  •  | 
  •  

Question

J'ai une page Web sur laquelle j'aimerais remapper Ctrl + N sur un comportement différent. J'ai suivi l'exemple de YUI de registre Key Listeners et ma fonction s'appelle, mais Firefox crée toujours une nouvelle fenêtre de navigateur. Les choses semblent bien fonctionner sur IE7. Comment puis-je empêcher la nouvelle fenêtre de s'afficher?

Exemple:

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
             {fn:function(event) {
                     YAHOO.util.Event.stopEvent(event); // Doesn't help
                     alert('Click');}});
kl2.enable();

Il est possible de supprimer le comportement par défaut. Google Documents remplace Ctrl + S pour enregistrer votre document au lieu de faire apparaître la boîte de dialogue de sauvegarde de Firefox. J'ai essayé l'exemple ci-dessus avec Ctrl + S mais la boîte de dialogue de sauvegarde de Firefox apparaît toujours. Puisque Google peut empêcher la boîte de dialogue de sauvegarde de s’ouvrir, je suis sûr qu’il existe un moyen d’empêcher la plupart des raccourcis clavier par défaut.

Était-ce utile?

La solution

Le truc c'est que la fonction 'fn' est whack.

Expérimentalement, vous pouvez voir que le type de fonction pour fn prend deux paramètres. Le premier paramètre contient en fait le type d'événement. Le second contient ... et c’est vicieux: un tableau contenant le code codé à l’indice 0 et l’objet événement réel à l’indice 1.

Si vous changez votre code un peu, il devrait ressembler à ceci:

function callback(type, args)
{
    var event = args[1]; // the actual event object
    alert('Click');

    // like stopEvent, but the event still propogates to other YUI handlers
    YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();

En outre, pour l'amour de lisp, n'utilisez pas de points de code brut dans votre code. Utilisez 'N'.charCodeAt (0) au lieu de "78". Ou envelopper comme une fonction

function ord(char)
{
    return char.charCodeAt(0);
}

Autres conseils

Je ne fais que deviner, mais je ne pense pas que cela puisse être fait.

Si c'est possible, cela ne devrait absolument pas l'être. Les raccourcis clavier génériques sont quelque chose que vous ne devriez pas jouer avec. Et après? Accrochez le bouton de fermeture de la fenêtre pour ouvrir une nouvelle fenêtre ...

En utilisant l'utilitaire d'événement de YUI, vous pouvez utiliser le Méthode stopEvent :

Cependant, comme la plupart des utilisateurs sont habitués à ce que les touches du clavier fassent une chose particulière dans le navigateur (nouvelle fenêtre de votre exemple), j’évite toujours les conflits, ce qui signifie en fait que je n’utilise aucune des touches méta ou de contrôle.

J'utilise simplement des lettres, ce qui est correct jusqu'à ce que vous ayez des zones de saisie de texte. Ce conseil peut donc vous être moins utile.

Même si redéfinir les raccourcis du navigateur par défaut n’est pas une mince affaire, cela vaut parfois la peine, car cela donne une apparence plus professionnelle à l’application. Regardez ce script:

http://www.openjs.com/scripts/events /keyboard_shortcuts/index.php#disable_in_input

Cela s’avère bien fonctionner pour moi ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top