Question

Existe-t-il un moyen de détecter la disposition actuelle du clavier à l'aide de JavaScript? j'ai trouvé cette, mais il ne détecte que si le visiteur est sur la disposition anglaise. J'ai besoin de connaître la disposition exacte comme une chaîne, par exemplede-ch, fr ou en.

Était-ce utile?

La solution

Les dispositions de clavier n'ont pas d'identifiants standardisés. Ils ont des noms qui leur sont attribués par le créateur de mise en page. Ils peuvent avoir une association linguistique comme une propriété définie.

Les dispositions de clavier ne doivent pas être confondues avec les identificateurs de langue ou de lieu. En particulier, il n'y a pas de «disposition anglaise» mais des dizaines de dispositions qui peuvent être utilisées pour l'anglais.

Je ne pense pas que les systèmes rendent normalement leurs paramètres de mise en page actuels lisibles via JavaScript.

Donc, quel que soit le problème que vous essayez de résoudre en détectant la disposition du clavier, une approche différente est nécessaire.

Autres conseils

Je sais que cette question est ancienne, mais pour ceux d'entre vous qui ont été entravés par le fait que certaines clés me disent à différents personnages dans d'autres endroits, voici une approche que vous pouvez utiliser pour y faire face.

Très probablement, vous avez votre gestionnaire d'événements de clavier lié à un événement Keyup ou Keydown; Les résultats de la propriété Event.which ou Event.KeyCode dans ce cas sont liés à la touche que l'utilisateur a appuyé. Par exemple, la même clé que vous utilisez pour taper ';' Dans une mise en page EN est la clé utilisée pour taper «ж» dans une disposition RU, et l'événement rapporte 186 comme le code pour les deux.

Cependant, si vous êtes plus intéressé par le personnage résultant de la presse de touches, vous devez utiliser l'événement «Keypress» à la place. Cet événement se déclenche après Keydown / UP, et il rapporte le codepoint Unicode réel du caractère qui a été tapé à l'intérieur de l'événement.

Donc, si vous préférez ne pas deviner les dispositions de clavier et que vous n'avez pas besoin de faire la différence entre le Keyup / Keydown, Keypress peut être une alternative viable pour vous. Ce n'est pas parfait (la plupart des navigateurs ne signalent pas de manière cohérente les événements de la pression sur les touches qui n'impriment pas les caractères, comme les touches de modificateur, les clés de fonction et les clés de navigation), mais c'est mieux que de deviner les Keycodes lorsqu'ils traitent des caractères imprimables.

Vous cherchez comment détecter leur lieu. Dans les en-têtes HTTP, il est stocké dans le En langage acceptable En-tête, mais ce n'est pas disponible pour le navigateur via Pure JS.

Il y a un plugin jQuery appelé 'Langue du navigateur«Cela pourrait vous amener sur le bon chemin.

Tout ce que je sais de ce sujet et a déjà implémenté une solution pour cela, c'est de détecter le clavier de mise en page non anglais, c'est-à-dire des langues qui utilisent n'importe quel alphabet autre que celui utilisé en anglais. La solution dépend de l'expression régulière pour correspondre à n'importe quel caractère de mot \w, n'importe quel personnage de chiffre \d Et une gamme de caractères spéciaux de clavier anglais prédéfinis, de sorte que tous les autres caractères, tels que l'arabe, le japon J'utilise cette solution pour restreindre et informer les noms d'utilisateur et les mots de passe entrée dans le formulaire de connexion. Je l'ai emballé dans une fonction comme ce qui suit:

function checkKeyboard(ob,e){
        re = /\d|\w|[\.\$@\*\\\/\+\-\^\!\(\)\[\]\~\%\&\=\?\>\<\{\}\"\'\,\:\;\_]/g;
      a = e.key.match(re);
      if (a == null){
        alert('Error 2:\nNon English keyboard layout is detected!\nSet the keyboard layout to English and try to fill out the field again.');
        ob.val('');
        return false;
      }
      return true;
    } 

Ensuite, appelez la fonction de l'événement comme suit:

$("#textFieldId").keydown(function(e){
        if (!checkKeyboard($(this),e)){
            return false;
        }
    });

C'est Démo de travail Pour les électeurs inconnus!

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