Formation PUB040 : JavaScript et autres bibliothèques côté client, 2020 JavaScript

2.4 Réagir à un événement avec JavaScript


Grâce aux événements JavaScript, il est possible de lancer une action lorsque quelque chose se produit, par exemple lorqu'un bouton est cliqué ou lorsqu'une case de saisie perd le focus.

Le code à exécuter sera généralement placé dans une fonction. Cette fonction est désignée sour le nom gestionnaire d'événement ou fonction de rappel. En anglais, on dira event handler ou callback function.

Il existe deux principales techniques pour associer un gestionnaire à un événement :

  • addEventListener()

    ou

  • propriété dont le nom débute par « on »

addEventListener()

En JavaScript pur, il est possible d'utiliser la méthode addEventListener() pour associer du code à un événement.

JavaScript

let code = document.getElementById('code');

if (code != null) {
    code.addEventListener('blur', validerCode);
}

Remarquez qu'il ne faut pas mettre de parenthèses après le nom du gestionnaire d'événement : on n'est pas en train d'exécuter la fonction, on ne fait que dire ce qui devra être fait lorsque l'événement surviendra.

Ainsi, lorsqu'on attache un gestionnaire à un événement, c'est JavaScript qui se chargera d'appeler la fonction lorsque l'événement surviendra.

Liste d'événements disponibles

Parmi les événements disponibles avec addEventListener(), notons :

Il existe de nombreux autres événements disponibles. La liste d'événements que vous pouvez utiliser dépend du type d'objet auquel vous désirez attacher un gestionnaire.

Il n'est pas nécessaire de connaître précisément la hiérarchie des classes JavaScript pour s'y retrouver. Sachez seulement que certains événements ne sont disponibles que pour certains objets. 

Vous trouverez les différents événements dans l'une des pages suivantes :

Affecter un gestionnaire d'événement à partir d'une propriété

Il est également possible de travailler avec des propriétés de l'élément.

Le nom de la propriété est généralement composée de « on » suivi du nom de l'événement, par exemple :

Remarquez que la propriété onkeypress, associée à l'événement keypress, est obsolète. Il faut utiliser onkeydown.

Le code qui suit fait à peu près la même chose que le addEventListener(). Il existe cependant de petites différences.

Entre autres, addEventListener() permet d'attacher plusieurs gestionnaires à l'événement alors que les propriétés écrasent ce qui était déjà attaché avant d'attacher le nouveau code.

JavaScript

let code = document.getElementById('code');

if (code != null) {
    code.onblur = validerCode;
}

Erreur à éviter

Pour assigner un gestionnaire à un événement, il faut utiliser l'une ou l'autre de ces techniques mais pas les deux.

Voici deux exemples de code à éviter puisqu'ils assignent deux fois le gestionnaire à l'événement.

JavaScript

monformulaire.addEvenListener('submit', function (event) {
   monformulaire.onsubmit = validerFormulaire;
});

JavaScript

monformulaire.onsubmit = function (event) {
   monformulaire.addEvenListener('submit', validerFormulaire);
});

Paramètre event

Le gestionnaire d'événement, recevra automatiquement en paramètre un objet qui représente l'événement qui vient d'avoir lieu.

Il sera possible d'obtenir différentes informations à partir de cet objet.

Dans cet exemple, on s'en sert pour récupérer l'information qui est entrée dans la balise <input>.

JavaScript

function validerCode(event) {
    let valeur = event.target.value;
    ...
}

Travailler avec une fonction anonyme

Dans les extraits de code précédents, on a travaillé avec une fonction nommée. Le gestionnaire d'événement peut également être une fonction anonyme.

L'objet event peut être utilisé dans les deux cas.

JavaScript

let code = document.getElementById('code');

if (code != null) {
    code.onblur = function (event) {
        let valeur = event.target.value;
        ...
    };
}

Fonctions fléchées 

Il existe une autre syntaxe pour définir des fonctions anonymes : les fonctions fléchées. On les appelle aussi fonctions lambda.

Les fonctions fléchées ont été crées afin d'alléger la syntaxe et pour régler quelques technicalités qui dépassent le but de cette formation.

La transformation consiste à enlever le mot function puis à ajouter une flèche (=>) entre la parenthèse fermante et l'accolade ouvrante.

JavaScript

let code = document.getElementById('code');

if (code != null) {

    code.onblur = (event) => {
        let valeur = event.target.value;
        ...
    };
}

À vous de déterminer la syntaxe qui vous plaît le plus.

Associer un événement à plusieurs éléments

Voici une technique intéressante pour associer rapidement un gestionnaire d'événement à plusieurs éléments.

Dans cet exemple, chaque balise <input> passera dans la moulinette dès qu'elle perd le focus.

JavaScript

let inputs = document.getElementsByTagName('input');

for (let input of inputs) {
    input.onblur = function (event) {
        ...
    };
}

event.preventDefault()

Dans l'exemple qui suit, tous les attributs qui ont la classe hautpage feront défiler la page jusqu'en haut lorsqu'on cliquera dessus.

Remarquez l'instruction event.preventDefault(). Elle assure que le comportement natif de la balise ne sera pas exécuté. Par exemple, si on clique sur un lien, on ne veut pas que la page soit automatiquement changée pour l'attribut href.

JavaScript

let liens = document.getElementsByClassName("hautpage");

for (let lien of liens) {
    lien.onclick = function (event) {
        event.preventDefault();

        window.scrollTo({
            top: 0,
            behavior: 'smooth',
        });
    };
}

À éviter : attributs HTML

Autrefois, on utililsait des attributs HTML pour associer les gestionnaire aux événements.

HTML

<input type="button" id="recalculer" value="Recalculer" onclick="recalculer();" />

Le site MDN est clair : il ne faut plus utiliser cette technique. Les techniquess présentées plus haut offrent l'avantage de mieux séparer le code HTML du code JavaScript puisqu'on n'aura pas à imbriquer un appel JavaScript à l'intérieur de la balise.

De plus, grâce aux techniques de sélection d'éléments, il est possible d'assigner d'un seul coup un traitement JavaScript à un groupe d'éléments HTML, tel que démontré plus haut.

Pour plus d'information

« element - Événements ». MDN. https://developer.mozilla.org/fr/docs/Web/API/Element#%C3%A9v%C3%A8nements

« La gestion d’évènements en JavaScript et la méthode addEventListener  ». Pierre Giraud. https://www.pierre-giraud.com/javascript-apprendre-coder-cours/addeventlistener-gestion-evenement/

 

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre