Event.preventDefault()

Bloque l’action par défaut du navigateur pour un événement, par ex. l’envoi d’un formulaire ou le suivi d’un lien.

Renvoie
undefined
Sur cette page

Exemple

#
JavaScript
const form = document.querySelector('#login')

form.addEventListener('submit', (event) => {
  event.preventDefault()
  const data = new FormData(form)
  console.log('Envoi via fetch :', data.get('email'))
  console.log('La page ne va pas se recharger :', event.defaultPrevented)
})

form.requestSubmit()
Console
Envoi via fetch : lea@example.com
La page ne va pas se recharger : true

La dernière ligne envoie le formulaire depuis le code, pour que le résultat apparaisse immédiatement. Cliquer sur le bouton dans l’aperçu fait la même chose.

Définition et utilisation

#

Beaucoup d’événements ont une réaction par défaut du navigateur : cliquer sur un lien ouvre une nouvelle adresse, envoyer un formulaire recharge la page, et cliquer sur une case à cocher change son état. Appeler event.preventDefault() dans la fonction de gestion bloque cette réaction, ce qui vous permet de gérer la situation vous-même.

L’exemple le plus courant est un formulaire : vous bloquez le rechargement de la page, vérifiez les données et les envoyez avec fetch(). La propriété event.defaultPrevented permet de vérifier si l’action par défaut a déjà été bloquée.

preventDefault() n’arrête pas la propagation de l’événement vers les éléments parents, c’est le rôle de stopPropagation(). Elle n’a pas non plus d’effet dans un écouteur ajouté avec l’option passive: true, ni pour des événements qui ne peuvent pas être annulés (event.cancelable vaut alors false).

Syntaxe

#
Syntaxe
event.preventDefault()

Plus d’exemples

#
Un lien géré par JavaScript
JavaScript
const more = document.querySelector('#more')

more.addEventListener('click', (event) => {
  event.preventDefault()
  console.log('Je charge d’autres cours sans changer de page')
})

more.click()
Console
Je charge d’autres cours sans changer de page
Une case à cocher bloquée
JavaScript
const terms = document.querySelector('#terms')

terms.addEventListener('click', (event) => {
  event.preventDefault()
  console.log('Lisez d’abord le règlement')
})

terms.click()
console.log(terms.checked)
Console
Lisez d’abord le règlement
false

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

#
  • Dans la gestion d’un formulaire, appelez preventDefault() tout au début de la fonction. Si une erreur survient plus loin, la page ne se rechargera quand même pas.
  • Ne bloquez pas l’action par défaut sans raison. Les liens et les boutons doivent se comporter comme l’utilisateur s’y attend, y compris au clavier.
  • Pour arrêter la propagation d’un événement vers les parents, utilisez stopPropagation(), pas preventDefault().

Entrées associées

#

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