Détails
Comment puis-je savoir quel élément du DOM a le focus ?
Je voudrais savoir, en JavaScript, quel élément a actuellement le focus. J’ai parcouru le DOM et je n’ai pas encore trouvé ce dont j’ai besoin. Existe-t-il un moyen de le faire, et comment ?
La raison pour laquelle je cherchais ceci :
J'essaie de faire en sorte que des touches comme les flèches et enter
naviguent dans un tableau d'éléments de saisie. La touche Tab fonctionne maintenant, mais la touche Entrée et les flèches ne fonctionnent pas par défaut, semble-t-il. J'ai mis en place la partie de gestion des touches, mais je dois maintenant trouver comment déplacer le focus dans les fonctions de gestion des événements.
1226
3
Utilisez [
document.activeElement
][1], il est pris en charge par tous les principaux navigateurs.Auparavant, si vous essayiez de savoir quel champ de formulaire avait le focus, vous ne pouviez pas le faire. Pour émuler la détection dans les anciens navigateurs, ajoutez un gestionnaire d'événement "focus" ; à tous les champs et enregistrez le dernier champ focalisé dans une variable. Ajoutez un gestionnaire d'événement "blur" pour effacer la variable en cas d'événement "blur" pour le dernier champ ciblé.
Liens connexes :
[activeElement Compatibilité avec les navigateurs][2]
https://stackoverflow.com/questions/3328320/jquery-alternative-for-document-activeelement
[1] : https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement [2] : https://developer.mozilla.org/en/DOM/document.activeElement#Browser_compatibility
Comme l'a dit JW, vous ne pouvez pas trouver l'élément focalisé actuel, du moins d'une manière indépendante du navigateur. Mais si votre application est uniquement IE (certaines le sont...), vous pouvez le trouver de la manière suivante :
EDIT : Il semble qu'IE n'avait pas tout faux après tout, cela fait partie du brouillon HTML5 et semble être supporté par la dernière version de Chrome, Safari et Firefox au moins.
Je mets juste ceci ici pour donner la solution que j'ai finalement trouvée.
J'ai créé une propriété appelée document.activeInputArea, et j'ai utilisé l'addon HotKeys de jQuery pour capturer les événements clavier pour les touches fléchées, la tabulation et l'entrée, et j'ai créé un gestionnaire d'événements pour le clic dans les éléments de saisie.
J'ai ensuite ajusté l'activeInputArea chaque fois que le focus changeait, afin de pouvoir utiliser cette propriété pour savoir où je me trouvais.
Mais il est facile de tout faire foirer, car si le système présente un bug et que le focus n'est pas là où vous pensez qu'il est, il est très difficile de rétablir le focus correct.