IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Redéfinition des accesskeys


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Redéfinition des accesskeys
    Bonjour à tous,

    Je suis entrain d'essayer de faire une classe javascript qui va en quelque sorte me permettre de redéfinir le principe des accesskey. Ce n'est pas pour un site web mais plutot pour une application interne, donc pas de problème. Je désire le redéfinir car le comportement des accesskey n'est pas le même suivant tous les navigateurs. Moi je voudrais que lorsque quelqu'un appuie sur une touche "raccourcis", que le raccourci en question se déclenche directement. Bref.

    Pour cela, je pensais définir une balise type, par exemple du nom de raccourci. Au début du script, j'initialise un tableau, que je remplie avec toutes les occurences trouvés correspondant à la balise raccourci avec getAttribute:

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="lien.html" raccourci="L">Lien</a>
    Que j'obtiens avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var r1 = document.getElementsByTagName('a')[0].getAttribute('raccourci');
    J'enregistre tout ça dans mon tableau.
    Ensuite, j'ai une fonction qui se charge de repérer les touches entrées par l'utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onKeyDown = function(touche) {}
    Mon problème est le suivant. Pour savoir si un raccourci existe ou non sur la touche appuyée, je voulais tester une égalité dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(touche.keyCode == monTableauDeRaccourci[0].charCodeAt[0]) {
    action 
    }
    Après quelques recherches, j'ai trouvé que keyCode renvoyé un chiffre Unicode, et charCode aussi, et pourtant, l'égalité n'est jamais vérifié pour un même caractère: les chiffres renvoyés par keyCode et charCodeAt ne sont pas les mêmes. Pourtant, les deux devraient être de l'unicode non ?

    Par exemple, pour la lettre g, l'un me renvoit une valeur dans les 70, l'autre dans les 100. Quelqu'un aurait une idée d'où ça pourrait venir ?

    Merci à vous =)

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bon vu que pas grand monde n'a su répondre ^^, je vous reformule le problème plus clairement ! Voici un exemple de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <html>
    <head>
    <title>essai touche clavier</title>
    <script>
    function touche(e) {
     
    var caractere = 'a';
    var code = e.which;
     
    alert(code + '>>>' + caractere.charCodeAt(0));
     
    }
     
    document.onkeydown = touche;
    </script>
    </head>
    <body>
    TEST
    </body>
    </html>
    Je sais que ça ne marche que sous firefox, mais je ferais l'adaptation une fois le problème résolu. En fait, quand on appuie sur la lettre 'a' du clavier (mais on pourrait évidemment prendre l'exemple avec un autre caractère), les codes ne correspondent pas... En effet, pour 'code', il rend 65, alors que pour caractere.charCodeAt(0), il rend 97... (toujours dans le cas où on appuie sur le a du clavier hein :p).

    Savez vous d'ou ça peut venir ? L'encodage est-il différent entre which et charCodeAt ?

    Merci =)

  3. #3
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    La fonction string.charCodeAt(index) renvoit le code unicode de la lettre de string a l'index spécifié (les 128 premières valeurs correspondent au charset ascii)

    L'évènement onkeypress transporte avec lui le code ascii de la touche enfoncée.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci de ta réponse. Connais-tu une équivalence pour passer de l'un à l'autre ?
    Existe-t-il une fonction pour convertir un code ascii en unicode ou inversement ?

  5. #5
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    au fait est-tu sûr que pour 'a' which ne renvoie pas plutôt 61 ??

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui, il renvoie bien 65.

    Sinon, j'ai trouvé une méthode. En fait je touche pas au caractère 'a', je bosse juste sur 'code'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var code = e.which;
    code = String.fromCharCode(code);
    On a alors la valeur de la touche appuyée, soit dans mon cas A si on appuie sur A. Reste à comparer correctement 'code' et 'caractère' par toLowerCase() par exemple.

    Voilà =)

  7. #7
    Membre averti Avatar de linar009
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    497
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 497
    Points : 323
    Points
    323
    Par défaut
    Oui exact!
    65 est bien le code ASCII de la lettre 'A' (en majuscule) et 97 le code de 'a' (en minuscule)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2008, 19h20
  2. Redéfinition des appels systèmes
    Par peaceinpal dans le forum Bibliothèque standard
    Réponses: 13
    Dernier message: 03/06/2008, 16h31
  3. Réponses: 10
    Dernier message: 17/12/2007, 11h13
  4. redéfinition des exceptions.
    Par marruecco dans le forum Langage
    Réponses: 3
    Dernier message: 04/10/2007, 12h59
  5. redéfinition des opérateurs en C++
    Par apan dans le forum C++
    Réponses: 11
    Dernier message: 27/03/2006, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo