Les événements

Le navigateur gère un certain nombre d'événements que l'on peut capter en javascript.

Les événements sont captables sur tous les éléments du DOM ainsi que sur l'objet document et l'objet window

Les événements ont un nom normalisé dans tous les navigateurs

Nom

Description

click

Un click sur un élément

mousedown

Un appui sur l'un des boutons de la souris

mouseup

Un lâché sur l'un des boutons de la souris

mousemove

Un déplacement de la souris

keypress

Une touche frappée au clavier

keydown

Une touche enfoncée au clavier

keyup

Une touche relâchée au clavier

change

Un changement dans la valeur d'un champ de formulaire

submit

Au moment de la soumission d'un formulaire

load

Après le chargement complet de la page

Liste de tous les événements de Firefox : https://developer.mozilla.org/fr/docs/Web/Events

Captation simple

Les éléments ont des propriétés qui permettent d'associer un objet fonction à un événement sur cet élément. Les propriétés dépendent de l'élément.

Remarque

Les propriétés portent le préfixe on

Exemple

<button id='bouton1'>Cliquez moi</button>

Exemple

document.getElementById('bouton1').onclick=function(e) {

console.log(e) ;

Une fonction de rappel d'un événement prend en argument un objet de type Event.

L'objet Event possède des propriétés qui dépendent de l'événement.

Modèle complet du gestionnaire d'événement

Les événements sont diffusés à partir de la fenêtre window en deux phases consécutives.

La phase capture

L'événement part de l'objet window et est ensuite transmis à document puis à tous les éléments enfants jusqu'à la cible de l'événement.

La phase bubbling

Après la phase capture, l'événement repart de l'élément cible et est transmis à l'ensemble des éléments parents.

Truc & astuce

On peu capter un événement dans l'une ou l'autre des phases. Si un événement est capté dans la phase capture, on peut l'empêcher de continuer à être propagé aux enfants. A l'inverse dans la phase bubbling ou peut l'empêcher d'être transmis aux parents.

Attention

Le captage simple par les méthodes on se fait toujours dans la phase bubbling. C'est donc la méthode de l'élément cible qui sera appelée en premier.

Exemple

1
<div id='d1'>
2
  <div id='d2'>
3
    <button id='b1'>Cliquez-moi !</button>
4
  </div>
5
</div>
6
<script>
7
   function click(e) {
8
      console.log(e);
9
   }
10
   document.getElementById('d1').onclick=click;
11
   document.getElementById('d2').onclick=click;
12
   document.getElementById('b1').onclick=click;
13
</script>

stopPropagation()

Pour empêcher un événement de se propager, dans la fonction de rappel il suffit d'appeler la méthode stopPropagation() de l'événement.

Exemple

1
<div id='d1'>
2
  <div id='d2'>
3
    <button id='b1'>Cliquez-moi !</button>
4
  </div>
5
</div>
6
<script>
7
   function click(e) {
8
      console.log(e);
9
      e.stopPropagation();
10
   }
11
   document.getElementById('d1').onclick=click;
12
   document.getElementById('d2').onclick=click;
13
   document.getElementById('b1').onclick=click;
14
</script>

Captage en phase capture et fonctions multiples

Pour capter un événement on peut utiliser une méthode universelle que les méthodes simples : addEventListener().

Cette méthode prend 3 arguments :

  • une chaine de caractère représentant l'événement à capter : ex : 'click'

  • la fonction de rappel à exécuter : ex : click

  • la phase : true pour la phase capture ou false pour la phase bubbling

Exemple : Capture d'événement en phase capture

1
<div id='d1'>
2
  <div id='d2'>
3
    <button id='b1'>Cliquez-moi !</button>
4
  </div>
5
</div>
6
<script>
7
   function click(e) {
8
      console.log(e);
9
   }
10
   document.getElementById('d1').addEventListener('click',click,true);
11
   document.getElementById('d2').addEventListener('click',click,true);
12
   document.getElementById('b1').addEventListener('click',click,true);
13
</script>

Exemple : Capture d'événement en phase bubbling

1
<div id='d1'>
2
  <div id='d2'>
3
    <button id='b1'>Cliquez-moi !</button>
4
  </div>
5
</div>
6
<script>
7
   function click(e) {
8
      console.log(e);
9
   }
10
   document.getElementById('d1').addEventListener('click',click,false);
11
   document.getElementById('d2').addEventListener('click',click,false);
12
   document.getElementById('b1').addEventListener('click',click,false);
13
</script>

Truc & astuce

Certains événements sont gérés aussi par le navigateur, par exemple des raccourcis claviers, le menu contextuel sur click droit ou la sélection de texte (mousedown + mousemove).

Truc & astuce

On peut empêcher le comportement par défaut par la méthode de l'événement preventDefault()

Blocage d'un événement pour toute la page

Pour bloquer un événement sur toute la page, il suffit de le capter en phase capture sur l'objet window et d'empêcher sa propagation.

Exemple : Blocage du menu contextuel pour toute la page

1
window.addEventListener('contextmenu',function(e) {
2
    e.preventDefault();
3
},true) ;
4
AccueilLes événementsSuivant >