Fiche Javascript : Gestions des évènements

Objet de la fiche

État de la fiche Validé


Plan de la fiche :

Avant propos

Cette fiche est très importante afin de bien comprendre les différentes méthodes mises à votre disposition pour rendre votre site interactif en réponses à divers évènements.

Généralités

Les évènements javascript permettent d'intercepter les changements d'états de l'environnement provoqués par le document HTML, les scripts ou l'interaction du client. 

Principe

 

Le concepteur d'une page HTML devra prévoir dans sa page des scrutateurs d'évènements (1) et les scripts à exécuter (5) lorsque les scrutateurs d'évènement seront activés par des changements d'états de l'environnement provoqués par le document HTML, les scripts ou l'interaction du client (2).

 Un scrutateur d'évènement activé génère dynamiquement un objet évènement (3) dont les propriétés (4) pourront être exploitées par le script (5).

Phases

Pour qu'un évènement sur un élément HTML puisse être détecté il faut en premier lieu attacher un scrutateur d'évènement sur cet élément. Cet élément peut être n'importe quel élément HTML tels que img, form, input, a etc.


(1) : Un évènement est détecté par le scrutateur d'événement attaché à l'élément (5) : pour notre exemple en va considérer que  l'évènement onclick sera attaché à une image (<img>) : on clique sur l'image et il se passe quelque chose comme par exemple l'apparition d'une bordure.

(2) : Cet évènement étant relatif à la fenêtre Web, un objet event est crée au niveau de la fenêtre Web active. Cet objet, suivant son origine peut contenir des informations spécifiques comme par exemple le code d'une touche du clavier ou le numéro du bouton de la souris..

(3) et (4) : L'objet event et se propage dans tout l'arbre du DOM (chemin rouge) à partir de la racine du document (incluse) jusqu'au noeud (ou son enfant direct) à l'origine de l'action qui a déclenché l'évènement (la cible). On appelle cela la phase de Capture. Dans cette phase la cible est exclue.

(5) : L'objet évènement atteint la cible et récupère les information qui lui sont associées. On appelle cela la phase Cible

(6) : L'objet évènement se propage dans le sens inverse  (chemin bleu) : de la cible (exclue) à la racine du document (incluse). Cette phase s'appelle la phase de Remontée d'évènements ou Bouillonnement ou encore diffusion. A l'issue de cette phase l'objet, et toutes ses propriétés, peut alors être exploité par des scripts javascript.

En bref l'objet event , après sa création lors de l'apparition d'un évènement,  se propage alors dans l'arbre DOM selon trois phases déterminées par la cible (l'objet depuis lequel l'évènement est intercepté) :

  • Capture : l'événement se propage de la racine du document (incluse) à la cible (exclue).
  • Cible : l'événement atteint la cible.
  • Bouillonnement : l'événement se propage dans le sens inverse : de la cible (exclue) à la racine du document (incluse).

Propriétés de l'objet Évènement

Cet objet a été défini par le W3C, mais malheureusement Internet Explorer en a sa propre définition ce qui oblige le développeur à tenir compte du navigateur. Certaines propriétés de cet objet concernent tous les types d'évènements et d'autres, tels que le bouton de la souris, sont spécifiques à un ou plusieurs évènements.

Internet Explorer Autres navigateurs Commentaires
srcElement target Permet de récupérer l'élément depuis lequel l'évènement à été envoyer. Il ne s'agit pas forcément de celui auquel on associe la fonction, mais de l'élément qui a récupéré le focus ou qui le récupère au moment de l'action. Par exemple, lors du clique de la souris sur un bouton, c'est ce bouton qui est renvoyé. Ou bien lorsque l'on appuie sur une touche du clavier, c'est l'objet qui a le focus qui est renvoyé.
Une fois que l'objet a été récupéré on peut disposer de ses caractéristiques, les propriétés de style, etc.
  currentTarget Permet de récupérer l'objet auquel l'évènement à été rattaché. Équivaut à utiliser la référence this qui fonctionne dans certain cas sous Internet Explorer.
cancelBubble stopPropagation Cette méthode arrête la propagation de l'événement dans l'arbre DOM après le nœud sur lequel il se trouve. Il faut faire attention au fait qu'il s'agisse d'une méthode dans le W3C mais d'un attribut sous Internet Explorer.
event.returnValue = false preventDefault Empêche l'action normalement prévue de se dérouler. Par exemple, lors de l'appuie sur la touche tabulation dans un champ texte, cela annulera le changement de focus et permettra l'insertion d'une indentation. Il est préférable d'utiliser l'expression "return false;" (sauf pour Internet Explorer) qui est mieux supportée.
clientX et clientY clientX et clientY Positionne ou récupère les coordonnées X et Y du pointeur de la souris, relatives à la fenêtre utile Web, hors ascenseurs, barre d'outils, de menu etc.
button which Cette propriété ne s'applique  qu'aux événements se rapportant aux boutons de la souris. Elle contient le numéro du bouton de la souris qui a été pressé. Malheureusement ces valeurs sont différentes suivant le navigateur. Voici la valeur de cette propriété selon les différents modèles existants. Bon courage si vous voulez les tester.
Norme officielle W3C Microsoft Firefox Opera
Bouton gauche 0 1 1 1
Bouton milieu 1 4 2 3
Bouton droite 2 2 3 2
  detail Cette propriété ne s'applique  qu'aux événements se rapportant aux boutons de la souris. La propriété  contient le nombre de fois que le bouton a été cliqué rapidement en séquence. Elle permet de tester des clics simples, doubles ou triples. Bien entendu, si vous ne souhaitez tester que les double-clics, vous pouvez plutôt utiliser l'événement dblclick. L'événement click sera lancé dès le premier clic, puis de nouveau pour le second clic, puis pour le troisième clic, tandis que l'événement dblclick ne sera lancé que pour un double-clic.
detail ne fonctionne pas sous IE. Les navigateurs donnent des résultats différents et l'exploitation des résultats se révèle aléatoire. Donc attention si vous désirez utiliser ces propriétés.

Exemple


Remarques sur le code

Dans body les éléments HTML imbriqués <table> <div> <div> <p> <img /> , <b> </b> </p> </div> </div> </table> sont tous affectés du scrutateur d'évènement onclick qui active la fonction info(event, 'Click sur table', true).

function info(e,_info,_fin) reçoit la référence de l'objet even crée à l'occasion de l'appui sur la touche click, un commentaire et l'information _fin qui peut être false (remontée en cours) ou true dernière balise HTML atteinte lors de la remontée.

Dans la fonction info()  evt  spécifie la référence de l'objet even : la syntaxe est étudiée ci dessous dans la "méthode par attributs"

  _obj = evt.srcElement pour Internet Explorer ou  _obj = evt.currentTarget pour les autres navigateurs spécifie l'élément (table, div, p ou b) et permettent d'exploiter ses propriétés comme le donnent les exemples proposés :

  • _col= _obj.style.backgroundColor; pour récupérer la couleur d'arrière plan de l'élément.
  • _width = _obj.style.width; pour récupérer la largeur de l'élément.
  • _tagName = _obj.tagName; pour récupérer le nom de l'élément.
  • _parentNode = _obj.parentNode; pour récupérer l'identification du noeud précédent.

Les scrutateurs d'évènements

Quand le DOM apporte l'interactivité

Le DOM est le modèle d'objets qui permet d'accéder aux éléments constitutifs d'une page. Il n'est pas en lui-même interactif. Pour créer des pages interactives, nous devrons détecter les événements susceptibles d'affecter un objet (un clic sur un lien, une image, une pression sur une touche du clavier, etc.) et leur associer des comportements.

Chaque événement a un nom, par exemple, mousemove est le nom de l'événement qui est déclenché quand l'utilisateur passe la souris au-dessus d'un élément d'interface utilisateur. Le tableau suivant donne une liste non exhaustive des évènements pouvant être observés.


Évènements Syntaxe Actions (* => à partir de javascript 1.2) Objets
abort onabort Interruption du chargement d'un l'objet Image, a, applet, body, button, input, textarea, select
Blur onBlur Clic hors d'un objet initialement sélectionné. Cet événement est enclenché quand le changement du contenu est terminé button, checkbox, FileUpload, layer, password, radio, reset, select, submit, text, textArea, window
change onchange Changement du contenu d'un champ de données. FileUpload, select, submit, text, textArea
click onclick Clic sur un objet button, document, checkbox, liens, radio, reset, select, submit
dblclick ondblclick Double clic sur un objet. document, Link, element de formulaire
dragdrop ondragdrop Glisser - déposer sur la fenêtre du navigateur. window
error onerror Erreur durant le chargement de la page.
 
Image, window
focus onfocus inverse de onblur button, checkbox, FileUpload, layer, password, radio, reset, select, submit, text, textArea, window
keydown onkeydown Appuie sur une touche du clavier.
 
document, Image, liens, textArea
keypress onkeypress Maintient enfoncé d'une touche de clavier. document, Image, liens, textArea
keyup onkeyup Relâche  touche  clavier préalablement enfoncée.
 
document, image, liens, textArea
load onload Fin de chargement de la page. Image, layer, window
mousedown onmousedown Appuie sur un des boutons de la souris button, document, liens
mousemove onmousemove Mouvement de  la souris Général
mouseout onmouseout Le curseur de la souris quitte un élément. layer, liens
mouseover onmouseover Le curseur de la souris survole l'objet. area, layer, liens
mouseup onmouseup Relâche d'un des boutons de la souris button, document, liens
move onmove Déplacement de  la fenêtre du navigateur. window
reset onreset Effacement des données d'un formulaire à l'aide du bouton Reset. form
resize onresize Disponible  lorsque l'utilisateur redimensionne la fenêtre du navigateur window
select onselect Sélection d'un texte (ou d'une partie d'un texte). text, textarea
submit onsubmit Clic sur le bouton 'Envoyer' d'un formulaire. form
unload onunload L'utilisateur quitte la page en cours. window
command oncommand L'événement command est déclenché quand l'utilisateur active un élément, par exemple en pressant un bouton, en cochant une case ou en sélectionnant une entrée d'un menu. L'événement command est pratique car il gère automatiquement les différentes méthodes d'activation d'un élément. Par exemple, l'événement command se produira indifféremment si l'utilisateur utilise sa souris pour cliquer le bouton ou s'il presse la touche Entrée.

Méthode de scrutation par attributs

Il y a 2 méthodes pour attacher un scrutateur d'événement à un élément.

  • La première dite par attributs  utilise les attributs avec un script comme valeur.
  • La seconde utilise la méthode addEventListener d'un élément.

Nous allons voir ici la méthode par attributs

L'utilisation de la méthode par attribut  est une manière commune pour la plupart des événements et elle est simple à écrire mais ne peut gérer les événements qu'en phase de diffusion. Cette méthode a deux désavantages principaux :

  • Les événements sont intégrés dans le langage, de telle sorte que pour ajouter un nouvel événement, on doit procéder à des changements dans le langage,
  •  Les événements sont  mélangés avec le contenu du document, les spécifications de script et de gestion d'événement, au lieu de  permettre leur séparation.

Chaque évènement peut être capté par les éléments HTML concernés en leurs associant une fonction ou une commande javascript. Les évènements sont des méthodes (le nom de l'évènement avec le préfix "on") qu'il suffit de définir. Ces méthodes peuvent prendre en paramètre un objet event qui permettra de contrôler l'évènement. Cependant, ce paramètre n'est pas toujours nécessaire.

Plusieurs types d'évènements peuvent être captés par un même élément HTML et plusieurs actions différentes peuvent être déclenchées.

Définir les évènements et les actions directement dans l'attribut concerné.

Syntaxe : sur Évènement = "action" . Exemple onmouseover=" action"

Exemple 1

L'appuie (évènement onclick) sur le bouton "Bouton 1" (attribut input) envoie un message(boite alert). 

Exemple 2


L'appui sur le Bouton1 (évènement onclick) va déclencher la modification du texte du bouton 2  puis changer la couleur de ce texte en rouge. L'appui sur le Bouton 2 va  rétablir le tout aux valeurs initiales.
Un évènement onkeypress est aussi défini sur le bouton 1 : lorsque celui est sélectionné, l'appui sur un touche quelconque du clavier va générer un message alert.

Définir les évènements dans l'attribut concerné et les actions dans une fonction externe.


Au survol de l'image on récupère les coordonnées du pointeur. Internet Explorer et les autres navigateurs ne gèrent pas de la même façon l'objet event. Pour la majorité des navigateurs, l'objet event est passé en paramètre à la fonction qui gère l'événement, pour IE c'est un objet global window.event.
Nous allons utiliser les propriétés relatives à l'événement .clientX et .clientY
qui donnent la position du curseur au moment où l'événement a été effectué. L'origine est le coin haut gauche de la zone de contenu de la fenêtre de votre navigateur.
 

Remarques sur le code

Les évènements onmousemove (mouvement du curseur sur l'attribut) et onmouseout (mouvement du curseur hors de l'élément) sont intégrés à l'attribut <img>

onmousemove fait appel à une fonction externe (infoCursor(event)) pour gérer et afficher les coordonnées du curseur.

Avec Internet Explorer l'objet event est disponible sous forme d'une variable globale window.event, alors qu'avec les autres navigateurs cet objet est passé directement et automatiquement en paramètre de la fonction.

Du fait de cette différence la ligne var evt = typeof window.event != 'undefined' ? window.event : e; permet de créer la variable  evt qui va prendre la valeur window.event si le type window.event est différent de undefined (cas Internet Explorer) ou la valeur e image de event transmis à la fonction (cas des navigateurs différents de IE).

evt représente alors la référence de l'évènement à laquelle on va appliquer les propriétés .clientX et clientY pour afficher les coordonnées du curseur lors du survol de l'image.

Définir les évènements  et les actions dans une fonction externe.

Des méthodes de scrutation par attribut, celle ci est certainement la plus propre car les événements ne sont  pas mélangés avec le contenu du document.


Remarques sur le code

Les évènements sont référencés par rapport à l'identificateur de l'attribut sur lequel on veut qu'ils s'appliquent. Ici il s'agit d'une image avec pour référence id="AttrImgMoveDblClick".

La déclaration des scrutateurs d'évènements se fait dans la fonction générale EventOnLoad() qui n'est appelée que lorsque l'évènement onload (<body onload="EventOnLoad()">) survient : cela signifiant que la totalité de la page est chargée. En effet il est impératif de savoir si l'ensemble de la page est chargée avant d'effectuer des opérations relatives à l'identificateur de l'attribut sur lequel on veut que les scrutateurs s'appliquent car sinon var x = document.getElementById("AttrImgMoveDblClick"); générerait une erreur, l'objet identifié par AttrImgMoveDblClick n'étant pas encore chargé par le flux.

Sur la base de l'objet image on va pouvoir affecter les différents types de scrutateurs comme par exemple x.onmousemove auquel on va affecter une action à réaliser par la fonction _On(e).

Comme dans l'exemple précédemment l'objet event est disponible sous forme d'une variable globale window.event pour Internet Explorer, alors qu'avec les autres navigateurs cet objet peut être passé directement et automatiquement en paramètre de la fonction. On retrouve donc la syntaxe pour fonctionner correctement avec l'ensemble des navigateurs : var evt = typeof window.event != 'undefined' ? window.event : e;

Utilisation de this
this est un mot clé de javascript compris par tous les navigateurs modernes qui permet de récupérer l'objet auquel l'évènement à été rattaché. Pour récupérer les propriétés de l'objet la syntaxe s'en trouve simplifiée : this.width pour la largeur, this.height pour la hauteur etc.

Nota : Une deuxième forme d'écrire du code aurait consister à mettre dans la fonction EventOnLoad() uniquement la déclaration des scrutateurs et de mettre les fonctions correspondantes aux actions en d'hors. Cette méthode peut apporter un peu plus de clarté au code en séparant les diverses fonctions, mais le propos principal de ce Nota était la syntaxe d'appel à la fonction correspondante à l'action qui s'écrit sans (): x.onmousemove = _On; .

Méthode de scrutation par addEventListener

Cette méthode peut gérer les évènements dans toutes les phases et peut aussi être utilisée pour attacher plusieurs scrutateurs d'événements à un élément. Cette possibilité d'ajouter des écouteurs d'événements tout au long du flux d'événements s'avère particulièrement utile lorsqu'un composant d'interface comprend plusieurs objets. Par exemple, un objet bouton contient souvent un objet texte qui sert de libellé au bouton. Sans la possibilité d'ajouter un écouteur au flux d'événements, il faudrait en ajouter un à l'objet bouton et un à l'objet texte pour être sûr d'être averti des événements de clic survenant à tout endroit du bouton. Le flux d'événements vous permet, au contraire, de placer un seul écouteur d'événements sur l'objet bouton afin de gérer les événements de clic, qu'ils se produisent sur l'objet texte ou sur des zones de l'objet bouton non couvertes par l'objet texte. Cette méthode qui sépare les évènements du contenu de la page HTML est à privilégier pour la conception de sites modernes.

 

Mise en oeuvre du scrutateur d' évènements

Pour assigner un événement en javascript, on doit tout d'abord récupérer l'objet  qui correspond à la balise html ou (x)html sur laquelle vous voulez appliquer l'événement. Ensuite pour affecter un scrutateur à cet objet et comme Internet Explorer ne fait pas les choses comme tout le monde nous seront obligés d'utiliser 2 méthodes :

La méthode addEventListener(NomEvenement,FonctionMonAction,typePropagation) associée aux navigateurs autres que Internet Explorer et la méthode attachEvent(NomEvenement,FonctionMonAction) associée à Internet Explorer uniquement.

Syntaxe générale

Soit var MonObjet = document.getElementById('MonAttribut') la référence de l'objet sur lequel on désire mettre en oeuvre un scrutateur d'évènement.

Pour IE : MonObjet.attachEvent(NomEvenement,FonctionMonAction)
et  : MonObjet.addEventListener(NomEvenement,FonctionMonAction,typePropagation) pour les autres navigateurs.

Méthode addEventListener

Syntaxe : addEventListener(NomEvenement,FonctionMonAction,typePropagation)

  • NomEvenement est une valeur de type String qui spécifie le nom de l'événement, sans le "on" en préfixe, exemple mousemove.
  • FonctionMonAction est le nom de la fonction sans les "()" qui va traiter l'événement,
  • typePropagation détermine comment le scrutateur va travailler : en phase capturing (true)  ou en phase bubbling (false). Le meilleur choix est d'utiliser false. (voir explications ci dessous).

Nota typePropagation : Le problème de base est très simple. Soit deux éléments imbriqués : <a id=...>      <img id=........></a> imaginons que l'on ait activé la supervision du click à la fois sur l'élément <a> et sur l'élément <img>. Si l'internaute clique sur l'élément <img> cela provoque un évènement click à la fois sur l'élément <img> et sur l'élément <a> car <img> est inclu dans <a>. La question est alors sur quel élément va s'appliquer l'action résultante (nomFonction) de l'évènement click?.

Le navigateur Netscape dit que c'est la fonction appliquée à l'évènement <a> qui sera activée en premier : on appelle cela travailler en phase capturing. Le navigateur Internet Explorer dit que c'est la fonction appliquée à l'élément <img> qui sera activé en premier : on appelle cela travailler en phase bubbling.

Méthode attachEvent

Syntaxe : attachEvent(NomEvenement,FonctionMonAction)

  • NomEvenement est une valeur de type String qui spécifie le nom de l'événement avec le préfixe "on" : exemple onmousemove.
  • nomFonction est le nom de la fonction sans les "()" qui va traiter l'événement.

Fusion des méthodes addEventListener et attachEvent

Afin de tenir compte des contraintes liées aux navigateurs le code javascript complet est de la forme :

Modes d'application avec addEventListener

  • Appliqué à un élément
    • element.addEventListener("click", function(){ alert("Bonjour"); });
    • element.addEventListener("click", maFontion);
      function maFontion() { alert ("Bonjour"); }
  • Plusieurs évènements sur un même élément
    • element.addEventListener("mouseover", maFontion1);
    • element.addEventListener("click", maFontion2);
    • element.addEventListener("mouseout", maFontion3);

  • Avec des paramètres passés à la fonction

    element.addEventListener("click", function(){ maFontion(p1, p2); });


  • Avec le type de propagation

    element.addEventListener("click", myFunction, true);

  • Avec la remontée d'un évènement

Exemple


Image test Un scrutateur d'évènement pour les évènements doubleclick est attaché à une image. Un message est affiché dans une boite alert lorsque survient cet évènement.

Gestion du scrutateur d' évènements

Netscape (Mozilla,Firefox) et Internet Explorer ne gèrent pas de la même façon l'objet event. Pour le premier, l'objet event est passé en paramètre à la fonction qui gère l'événement, pour le second c'est un objet global window.event.

Afin de tenir compte des contraintes liées aux navigateurs le code javascript de la fonction appelée sera de la forme ci-contre

var evt = typeof window.event != 'undefined' ? window.event : e; permet de créer la variable  evt qui va prendre la valeur window.event si le type window.event est différent de undefined (cas Internet Explorer) ou la valeur e image de event transmis à la fonction (cas des navigateurs différents de IE). evt représente alors la référence de l'évènement à laquelle on va appliquer les propriétés que l'on désire exploiter.

Supprimer un scrutateur d'événements

Pour Netscape, FireFox, Mozilla) on doit utiliser la méthode javascript removeEventListener, pour Internet Explorer on doit utiliser detachEvent. On fusionnera ces deux méthodes javascript dans une seule fonction. Dans l'exemple suivant on va supprimer la gestion d'un évènement mousemove  qui active la fonction MouseMoveXY.

Remarque : pour retirer correctement la gestion de l'évènement il faut que les paramètres de suppression soient identiques aux paramètres d'activation : nomEventnomFonction et ,  typePropagation.

Exemple général


Evénements principaux de la souris

Généralités

Il existe plusieurs événements pouvant être employés pour gérer les actions de la souris. Ces événements peuvent être définis indépendamment pour différents éléments de la page : bloc, paragraphe, images, liens, body etc...

  • click : appelé lorsque la souris est appuyée puis relâchée sur un élément.
  • dblclick : appelé lorsque la souris est double-cliquée.
  • mousedown : appelé lorsqu'un bouton de la souris est pressé. Le gestionnaire d'événement est appelé aussitôt que le bouton de la souris est appuyé, avant même qu'il ne soit relâché.
  • mouseup : appelé lorsque la souris est relâchée sur un élément.
  • mouseover : appelé lorsque le pointeur de la souris survole un élément.
  • mousemove : appelé lorsque le pointeur de la souris se déplace au-dessus d'un élément. L'événement étant appelé à chaque déplacement de la souris, vous devriez éviter de faire appel à ce gestionnaire pour des tâches trop longues.
  • mouseout : appelé lorsque le pointeur de la souris quitte un élément.

Note 1 : En général mousedown et mouseup sont plus souvent utilisés que click. En effet certains navigateurs n'autorisent pas de lire la propriété button de l'objet click.

Note 2 : Il existe également un jeu d'événements relatifs au glisser / coller, qui intervient lorsque l'utilisateur maintient le bouton de la souris enfoncé et déplace la souris. Ces événements feront l'objet d'un chapitre spécifique car le glissé/collé peut apporter un plus certain à votre site.

Propriétés des événements de position de la souris

Tous les événements de la souris disposent des propriétés contenant les coordonnées de la position de la souris lors du déclenchement de l'événement. Il y a deux jeux de coordonnées. Le premier jeu définit les propriétés screenX et screenY mesurées depuis le coin supérieur gauche de l'écran. Le second jeu, clientX et clientY, est calculé à partir du coin supérieur gauche du document.

Propriétés des événements des boutons de la souris

Lorsqu'un événement sur un bouton de la souris se produit, on dispose d'un certain nombre de propriétés supplémentaires pour déterminer quels boutons ont été pressés ainsi que  la position du pointeur de la souris. La propriété button (pour Internet explorer), ou which (pour les autres navigateurs) de l'évènement 'event' peut être utilisée pour déterminer quel bouton a été pressé, avec les valeurs possibles de 0 pour le bouton de gauche, 1 pour le bouton de droite, et 2 pour le bouton du milieu. Si vous avez configuré votre souris différemment, ces valeurs peuvent être différentes. Comme signalé à la note 1 ci dessus évitez d'utiliser button avec l'évènement click.

La propriété detail est à éviter.

Mise en oeuvre du scrutateur d' évènements


Gestion des propriétés des évènements de position de la souris

Netscape (Mozilla,Firefox) et Internet Explorer ne gèrent pas de la même façon l'objet event. Pour le premier, l'objet event est passé en paramètre à la fonction qui gère l'événement, pour le second c'est un objet global window.event.
L'objet event regroupe un ensemble de propriétés relatives à l'événement : event.clientX et event.clientY
Ces deux propriétés donne la position du curseur au moment où l'événement a été effectué. L'origine est le coin haut gauche de la zone de contenu de la fenêtre de votre navigateur.

Afin de tenir compte des contraintes liées aux navigateurs le code javascript pour, par exemple récupérer les coordonnées du curseur avec  l'évènement mousemove,  sera de la forme :

Dans la partie headDans la partie body

La fonction getElementById() retourne l'élément ayant un identifiant id, dans notre cas, l'image. La fonction addEventListener() est appelée pour ajouter un nouveau scrutateur d'événement en phase de capture. Le premier argument est le nom de l'événement à scruter. Le deuxième argument est la fonction du scrutateur d'événement qui sera appelée quand l'événement se produira. Enfin, le dernier argument devra être true pour les scrutateurs en phase de capture. Vous pouvez également scruter durant la phase de diffusion en donnant la valeur false au dernier argument. La fonction scrutateur d'événement passée comme deuxième argument devra avoir un argument, l'objet 'event', comme vous le voyez dans la déclaration  ci-dessus (function MouseMoveXY(event) ). Si la fonction addEventListener n'est pas valide pour le navigateur, la méthode attachEvent sera utilisée.

Attacher un texte d'explication  lors du survol d'un élément par le curseur.


Attacher une image qui se déplace à coté du curseur.


Créer une fonction qui donne les coordonnées XY du curseur.

La fonction donne les coordonnées du curseur (et tient compte des déplacements des ascenceurs) lorsque l'on clique sur l'élément.


Click droit et menu contextuel.

Cet exemple n'a de sens que si vous voulez maitriser complètement le menu contextuel. L'exemple suivant permet d'afficher un menu contextuel personnalisé en fonction de l'élément sur lequel on a activé le click droit.

 

Evénements principaux du clavier

Les évènements

Les évènements disponibles du clavier sont les suivants :

  • onkeypress(1) : lorsqu'une touche est activée,
  • onkeydown(2) : lorsqu'une touche est enfoncée,
  • onkeyup(2) : lorsqu'une touche est 'relevée'.

Nota1 :

  • Cet événement ne capte pas les touches de contrôle comme Ctrl, Alt, Shift et autres touches de ce genre.
  • Sa grande utilité réside dans sa détection de combinaisons de touches. Par exemple dans la combinaison Shift + A, l'événement onkeypress détectera bien un A majuscule alors que les événements onkeyup et onkeydown se déclencheront deux fois : une fois pour la touche Shift et une deuxième fois pour la touche A.

Nota2 :

  • Les événements onkeyup et onkeydown sont conçus pour capter n'importe quelles frappes de touches (aussi bien l'appui sur la touche A que sur la touche Ctrl ou ALT). La différence entre ces deux événements se situe dans l'ordre de déclenchement : onkeyup se déclenche au relâchement d'une touche, tandis que onkeydown se déclenche au moment de l'appui sur la touche.
  • Attention : avec ces deux événements toutes les touches retournant un caractère retourneront un caractère majuscule, que la touche Maj soit pressée ou non.

getModifierState(keyArg) méthode principale de l'objet event appliqué au clavier

Cette methode retourne un boolean correspondant à l'état courant de la touche spécifiée en paramètre. Réponse = true si la touche est pressée ou verrouillée (verrouillage majuscule/minuscule) , false dans les autres cas.

Exemple pour savoir si la touche de verrouillage majuscule/minuscule est active ou pas, on testera de la façon suivante : if(event.getModifierState('CapsLock')) faire ceci sinon faire cela.

Propriétés principales de l'objet event appliqué au clavier

L'objet event est passé à travers la fonction appelée sur l'objet en question.

Ses propriétés relatives au clavier sont les suivantes :

  • altKey : indique si la touche ALT du clavier est activé. Retourne une valeur booléenne qui signale si la touche 'ALT' est active (true) ou non (false).
  • shiftKey: indique si la touche SHIFT est activé. Retourne une valeur booléenne.
  • ctrlKey: indique si la touche CTRL est activé. Retourne une valeur booléenne qui signale si la touche 'CTRL' est active (true) ou non (false)
  • repeat: indique si une touche est activée en permanence (appui continu). Retourne une valeur booléenne.
  • code : Représente la clé physique sur le clavier indépendemment du caractère retourné non altérée par le type (qwerty, azerty ...) ou des réaffectation de touches.
  • key : Retourne la véritable valeur correspondante à la clé pressée sur le clavier de l'utilisateur en tenant compte de l'interaction avec les touches de contrôle (shift, alt, ctrl...) et de la configuration locale du clavier (qwerty, azerty ..).

Codes Clavier

Le langage Javascript associe à chaque touche du clavier un code numérique. Ainsi toute série de touches (et donc de lettres) peut être encodée avec des nombres.

Code renvoyéCde ClavierCode renvoyéCde ClavierCode renvoyéCde ClavierCode renvoyéCde Clavier
8 [BACKSPACE ⌫] 9 [TAB ↹] 13 [ENTER ⏎] 16 [SHIFT ⇧]
17 [CTRL] 18 [ALT] 19 [PAUSE] 20 [CAPS LOCK 🔒]
27 [ESCAPE] 32 Espace 33 [PAGE Haut ⇞] 34 [PAGE Bas ⇟]
35 [END] 36 [HOME ⇱] 37 [Flèche gauche ←] 38 [Flèche haut ↑]
39 [Flèche droite →] 40 [Flèche bas ↓] 45 [INSERT] 46 [DELETE]
48 0 49 1 50 2 51 3
52 4 53 5 54 6 55 7
56 8 57 9 65 A 66 B
67 C 68 D 69 E 70 F
71 G 72 H 73 I 74 J
75 K 76 L 77 M 78 N
79 O 80 P 81 Q 82 R
83 S 84 T 85 U 86 V
87 W 88 X 89 Y 90 Z
91 [LEFT WINDOWS ⊞] 92 [RIGHT WINDOWS ⊞] 93 [CONTEXT MENU] 96 [PAD 0]
97 [PAD 1] 98 [PAD 2] 99 [PAD 3] 100 [PAD 4]
101 [PAD 5] 102 [PAD 6] 103 [PAD 7] 104 [PAD 8]
105 [PAD 9] 106 * 107 + 109 -
110 . 111 / 112 [F1] 113 [F2]
114 [F3] 115 [F4] 116 [F5] 117 [F6]
118 [F7] 119 [F8] 120 [F9] 121 [F10]
122 [F11] 123 [F12] 144 [NUM LOCK] 145 [SCROLL LOCK]
186 ; 187 = 188 , 189 -
190 : 191 / 192 ` 219 (
220 \ 221 ) 222 '

Exemple


Autres évènements


Evénements Descriptions Syntaxes
onafterprint Cet événement se produit immédiatement après que les documents qui lui sont associés soient imprimés. onafterprint ="Instruction"
onafterupdate Cet événement se produit immédiatement après qu'un objet contenant des données ait effectué la mise à jour de données. onafterupdate ="Instruction"
onbeforecopy Cet événement se produit avant que la sélection ne soit copiée dans le presse-papiers. onbeforecopy ="Instruction"
onbeforecut Cet événement se produit avant que la sélection ne soit coupée du document. onbeforecut ="Instruction"
onbeforeeditfocus Cet événement se produit avant qu'un contrôle insère un changement au niveau de l'interface utilisateur. onbeforeeditfocus ="Instruction"
onbeforepaste Cet événement se produit avant que la sélection ne soit collée du presse-papiers vers le document. onbeforepaste ="Instruction"
onbeforeprint Cet événement se produit avant que les documents qui lui sont associés soient imprimés. onbeforeprint ="Instruction"
onbeforeunload L'événement est activé avant qu'une page ne soit retirée du cadre. onbeforeunload ="Instruction"
onbeforeupdate Cet événement se produit avant qu'un objet contenant des données n'effectue la mise à jour des données sur l'objet source. onbeforeupdate ="Instruction"
onbounce Cet événement est activé lorsque la valeur de l'attribut BEHAVIOR de l'élément <MARQUEE> est ALTERNATE et que le contenu de l'élément atteint l'une des limites de la zone de défilement. onbounce ="Instruction"
oncellchange Cet événement est activé lorsque les données sont modifiées. oncellchange ="Instruction"
oncontextmenu Cet événement est activé lorsque l'utilisateur presse le bouton droit de la souris sur l'élément, activant ainsi un menu contextuel. oncontextmenu ="Instruction"
oncopy Cet événement est activé lorsque l'utilisateur copie l'objet ou qu'une sélection est copiée dans le presse-papiers. oncopy ="Instruction"
oncut Cet événement est activé lorsque l'objet ou la sélection est coupé du document et ajouté au presse-papiers. oncut ="Instruction"
ondataavailable Cet événement est activé à chaque fois que des données transmises par un objet source sont reçues sur le système. ondataavailable ="Instruction"
ondatasetchange L'événement ondatasetchange est activé lorsque les données exposées à un objet source sont modifiées. ondatasetchange ="Instruction"
ondatasetcomplete Cet événement est activé pour indiquer que toutes les données de l'objet source sont disponibles. ondatasetcomplete ="Instruction"
ondrag Cet événement se produit lorsqu'une opération glisser-déplacer est effectuée sur l'élément avec la souris. ondrag ="Instruction"
ondragdrop Cet événement se produit lorsque l'utilisateur dépose un objet dans la fenêtre du navigateur à l'aide de la souris. ondragdrop="Instruction"
ondragend Cet événement se produit à la fin d'une opération glisser-déplacer. ondragend ="Instruction"
ondragenter Cet événement est activé lorsque l'utilisateur glisse l'élément sur une cible valide lors d'un glisser-déplacer effectuée avec la souris. ondragenter ="Instruction"
ondragleave Cet événement est activé lorsque l'utilisateur glisse l'élément hors d'une cible valide lors d'un glisser-déplacer effectuée avec la souris. ondragleave ="Instruction"
ondragover Cet événement se produit lorsque l'utilisateur glisse l'élément et passe sur une cible valide lors d'un glisser-déplacer effectuée avec la souris. ondragover ="Instruction"
ondragstart Cet événement se produit lorsque l'utilisateur entame une opération glisser-déplacer avec l'élément. ondragstart ="Instruction"
ondrop Cet événement agit sur l'objet cible lorsque l'utilisateur relâche le bouton de la souris après une opération de glisser-déplacer. ondrop ="Instruction"
onerrorupdate Cet événement se produit lorsqu'une erreur survient lors de la mise à jour des données associées à l'objet source. onerrorupdate ="Instruction"
onfilterchange Cet événement se produit lorsqu'un filtre visuel change d'état ou complète une transition. onfilterchange ="Instruction"
onfinish Cet événement se produit lorsque l'animation de l'élément <MARQUEE> se termine. onfinish ="Instruction"
onhelp Cet événement se produit lorsque l'utilisateur presse la touche F1 sur le clavier et que la fenêtre active est celle du Navigateur Web. onhelp ="Instruction"
onlosecapture Cet événement se produit lorsque l'élément perd le focus de la souris. onlosecapture ="Instruction"
onpaste Cet événement se produit lorsque l'utilisateur " colle " des données du presse-papiers vers le document. onpaste ="Instruction"
onpropertychange Cet événement se produit lorsque la propriété de l'élément change. onpropertychange ="Instruction"
onreadystatechange Cet événement se produit lorsque l'état de l'élément a changé. onreadystatechange ="Instruction"
onrowenter Cet événement se produit lorsque la rangée courante a changé dans la source de données et que de nouvelles données sont disponibles. onrowenter ="Instruction"
onrowexit Cet événement se produit juste avant que le contrôle de la source de données ne modifie la rangée courante de l'objet. onrowexit ="Instruction"
onrowsdelete Cet événement se produit juste avant la suppression de rangées au jeu d'enregistrements. onrowsdelete ="Instruction"
onrowsinserted Cet événement se produit après l'insertion de nouvelles rangées dans le jeu d'enregistrements. onrowsinserted ="Instruction"
onscroll Cet événement se produit lorsque l'utilisateur déplace le curseur de la barre de défilement de l'objet. onscroll ="Instruction"
onselectstart Cet événement se produit dès que l'objet est sélectionné. onselectstart ="Instruction"
onstart Cet événement se produit à chacune des reprises de l'animation de l'élément <MARQUEE>. onstart ="Instruction"
onstop Cet événement se produit lorsque l'utilisateur clique sur le bouton Stop ou Arrêter du navigateur. onstop ="Instruction"

Application au projet de site web



Respectons la propriété intellectuelle