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&#8217ai parcouru le DOM et je n&#8217ai pas encore trouvé ce dont j&#8217ai 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.

Solution

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&quot ; à 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 :

Commentaires (11)

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 :

document.activeElement

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.

Commentaires (8)

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.

Commentaires (0)