HTMLElement.focus()

Donne le focus à un élément, par ex. un champ de formulaire, pour qu’il reçoive immédiatement le clavier. La méthode blur() retire le focus.

Renvoie
undefined
Sur cette page

Exemple

#
JavaScript
const email = document.querySelector('#email')

email.focus()
console.log(document.activeElement === email)
console.log(document.activeElement.id)

email.blur()
console.log(document.activeElement === document.body)
Résultat
true
email
true

Cet exemple ne s’exécute pas dans l’aperçu, car il déplacerait le focus de cette page vers le cadre de l’exemple. Sur une page avec un champ <input id="email">, il affiche le résultat montré ci-dessus. Après blur(), le focus revient au document, et document.activeElement indique <body>.

Définition et utilisation

#

La méthode focus() donne le focus à l’élément, c’est-à-dire qu’elle fait en sorte qu’il reçoive les frappes du clavier. Un champ de texte avec le focus affiche un curseur clignotant, et un bouton avec le focus réagit à Entrée et à la barre d’espace. La méthode blur() fait l’inverse et retire le focus. Vous lisez l’élément qui a actuellement le focus avec document.activeElement.

Peuvent recevoir le focus les éléments interactifs : les champs de formulaire, les boutons, les liens avec un attribut href, et les éléments avec un attribut tabindex. Appeler focus() sur un simple div ou un titre ne fera rien, sauf si vous lui ajoutez tabindex="-1". Un tel élément peut être activé depuis le code, mais il n’entre pas dans l’ordre de parcours de la touche Tab.

Lors d’un changement de focus, l’élément reçoit les événements focus et blur, qui ne bouillonnent pas, ainsi que focusin et focusout, qui bouillonnent et se prêtent à la délégation. Par défaut, le navigateur fait défiler la page pour que l’élément avec le focus soit visible. L’option preventScroll: true désactive ce défilement.

Un usage réfléchi de focus() améliore l’accessibilité : après l’ouverture d’une boîte de dialogue, donnez le focus à son premier champ ; après sa fermeture, revenez sur le bouton qui l’a ouverte ; et après l’échec de l’envoi d’un formulaire, indiquez le premier champ en erreur. Ne déplacez cependant pas le focus sans raison claire, car les personnes qui utilisent le clavier et les lecteurs d’écran perdent alors leurs repères.

Syntaxe

#
Syntaxe
element.focus()
element.focus(options)
element.blur()

document.activeElement

Paramètres

#
  • options

    objet, optionnel

    preventScroll: true définit le focus sans faire défiler la page jusqu’à l’élément.

Plus d’exemples

#
Le focus après un clic sur un bouton
JavaScript
const reply = document.querySelector('#reply')
const comment = document.querySelector('#comment')

reply.addEventListener('click', () => comment.focus())
comment.addEventListener('focus', () => console.log('Champ de commentaire actif'))
comment.addEventListener('blur', () => console.log('Champ de commentaire inactif'))

console.log('Élément actif :', document.activeElement)
Console
Élément actif : <body>

Au départ, c’est le document lui-même, donc <body>, qui a le focus. Cliquez sur « Répondre », et le focus passera au champ de commentaire. Cliquez ensuite à côté du champ pour voir l’événement blur.

Le focus sur le titre après le chargement d’une leçon
JavaScript
const heading = document.querySelector('#lesson-title')

heading.setAttribute('tabindex', '-1')
heading.focus({ preventScroll: true })

console.log(document.activeElement.tagName)
console.log(heading.tabIndex)
Résultat
H2
-1

Sur une page avec un titre <h2 id="lesson-title">, celui-ci ne reçoit normalement pas le focus. tabindex="-1" permet de l’activer depuis le code, par ex. après le chargement d’une nouvelle leçon, afin qu’un lecteur d’écran lise immédiatement son titre. L’élément n’entre pas pour autant dans l’ordre de la touche Tab.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Après l’ouverture d’une boîte de dialogue, donnez-lui le focus, et après sa fermeture, revenez sur le bouton qui l’a ouverte. Les personnes qui utilisent le clavier ne perdront alors pas leur place sur la page.
  • Pour déléguer les événements de focus, utilisez focusin et focusout. Les événements focus et blur ne bouillonnent pas vers les parents.
  • Définissez l’apparence du focus en CSS avec :focus-visible. Le contour apparaîtra lors de la navigation au clavier, et non à chaque clic de souris.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.