Programmation événementielle en JS


Retour au menu

Résumé

L'utilisateur déclenche un "événement" (clic, déplacement souris, clic sur un bouton, choix d'un option de liste déroulante etc ...) relativement à un objet (lien, composant de formulaire ..).
L'événement est décelé (capté) par l'objet cible si celui-ci possède une "sensibilité" à l'événement. Il faut donc connaitre la correspondance objet-événement.
S'il prévoit un intérêt à "répondre" à cet événement, le programmeur doit à l'avance, associer du code JS ou une fonction JS à un tel couple objet-événement. L'appel et l'exécution de ce code ou de cette fonction seront automatiquement déclenchés par l'événement, et constituent ainsi la "réponse" à celui-ci.
Les fonctions sont déclarées dans la partie <HEAD> et les appels en général associés à la balise de l'objet HTML qui va capter l'événement. Il faut veiller à bien gérer le passage de paramétres, souvent un formulaire entier.

Evénements JS

Nous avons déjà vu des exemples d'appels de fonctions JavaScript provoquées par des événements qui surviennent au moment de l'exécution du programme.
Ces événements sont des actions qui sont déclenchées le plus souvent par l'utilisateur.
Par exemple, un clic sur un bouton (composant de formulaire) est un événement, comme l'est la validation d'un texte saisi dans une ligne de texte, ou le choix d'une option dans un composant case à cocher

Le navigateur reconnait un ensemble d'événements associés à des balises, des liens et des composants de formulaires. Par programmation, on peut leur associer des fonctions particulières appelées gestionnaires d'événements appelée systématiquement lorsque ces événements sont provoqués.

Un gestionnaire d'événement est une procédure particulière attachée à une balise HTML,

  1. prédéfinie par le langage JS (par exemple onClick)
  2. déclenchée par l'événement correspondant (click sur un composant de type button)
  3. qui apparait dans la balise du composant qui reçoit l'événement
    <INPUT TYPE="button" onClick= ...>
  4. et à laquelle on affecte une fonction écrite en JS, déclarée préalablement
    <INPUT TYPE="button" VALUE="Calcul" onClick="calculer(this.form)">

définition générale

<Balise onEvent = "code JS " >
  1. onEvent est le nom du gestionnaire d'événements associé à l'événement Event, comme onClick
  2. Balise est un nom de balise qui sait gérer un tel événement.
  3. "code JS" est généralement une fonction déclarée auparavant dans une section <HEAD> <SCRIPT>...</SCRIPT> </HEAD>
  4. Mais ce peut être aussi une suite d'instructions JS, séparées par des virgules.
Supposons déjà déclarée une fonction nommée calculer. On peut appeler le navigateur à l'exécuter au moment où l'utilisateur clique sur un bouton.
Pour cela il suffit d'affecter cette fonction calculer avec ses paramètres, au gestionnaire onClick qui réagit à l'événement click
Le code à écrire est : Le paramètre this.form fait référence au formulaire qui contient le bouton lui-même.

Remarques

On peut utiliser plusieurs gestionnaires d'événements sur un même composant.
Par exemple : <A HREF="URL" onMouseOver="fct1()" onMouseOut="fct2()">voir ...</A>

Liste des événements

Tableau récapitulatif

Gest. événement provoqué par l'utilisateur qui ... sur les objets ...
onBlurenlève le focus du composanttext, textarea, select
onChangechange la valeur d'un texte ou d'un composant à optionstext, textarea, select
onClickclique sur un composant ou un hyperlienbutton, checkbox, radio, reset, submit
onFocusdonne le focus au composanttext, textarea, select
onLoadcharge la page dans le navigateurbalises BODY, FRAMESET
onMouseOutla souris quitte un lien ou une ancrebalises <A HREF..>, <AREA HREF..>
onMouseOverbouge la souris sur un lien ou une ancrebalises <A HREF..>, <AREA HREF..>
onResetefface les saisies d'un formulairebouton reset
onSelectsélectionne une zone d'édition d'un formulairetext, textarea
onSubmitsoumet un formulairebouton submit
onUnloadquitte la pagebalises BODY, FRAMESET

Programmer un formulaire

Champ de TEXTE

<FORM NAME="Questions">
<INPUT TYPE="text" NAME="classe" VALUE=""  SIZE=10> ;
</FORM>

Liste de sélection SELECT

<FORM NAME="F">
<SELECT NAME="liste" 
	onChange='F.resultat.value+=F.liste.options[F.liste.selectedIndex].value' > ;
<OPTION VALUE="matin ... " >Matin
<OPTION VALUE="midi ... ">Midi
<OPTION VALUE="soir ... ">Soir
</SELECT>
<INPUT TYPE=TEXTE SIZE=40 NAME="resultat" VALUE="Vous avez sélectionné : " >
</FORM>

Propriétés de l'objet SELECT

Boutons de sélection RADIO

<FORM NAME="F">
<INPUT TYPE="RADIO" NAME="choix" value="sup. à 10" CHECKED 
	onClick='F.resultat.value=this.value'>plus de 10
<INPUT TYPE="RADIO" NAME="choix" value="entre 8 et 10" 
	onClick='F.resultat.value=this.value'>entre 8 et 10
<INPUT TYPE="RADIO" NAME="choix" value="inf. à 8" 
	onClick='F.resultat.value=this.value'>moins de 8

<INPUT TYPE=TEXTE SIZE=15 NAME="resultat" VALUE="" >
</FORM>

plus de 10
entre 8 et 10
moins de 8

Propriétés de l'objet RADIO

Cases à cocher CHECKBOX

Le traitement est complètement semblable au cas des boutons radio, à la différence que chaque case possède un nom propre distinct des autres. L'état checked de chaque case doit donc être testé individuellement.
Voir l'exemple complet qui suit.

Bouton de validation SUBMIT

Lorsque l'utilisateur "soumet" ses réponses en cliquant sur le bouton submit, une fonction programmée en réaction au gestionnaire de l'événement onSubmit peut analyser ses choix et y répondre.
On peut plus simplement préférer utiliser un bouton normal qui lance une fonction en réaction à l'événement onClick()
Voir l'exemple suivant.

Exemple récapitulatif

Voici la reprise du questionnaire présenté en exemple dans le chapitre formulaire du cours HTML.

Examiner en détail cette annexe. Exécuter plusieurs fois et parallèlement étudier le code JS.
Comprendre comment on peut effectuer des traitements à partir des choix de l'utilisateur.

Traitement d'un questionnaire (exemple-evenement.html)

Envoyer un formulaire

Pour envoyer la saisie d'un formulaire sans faire appel à des programmes à placer sur le serveur WEB, on peut envoyer le formulaire par courrier électronique de façon simple pour l'utilisateur.
Il suffit d'ajouter un attribut particulier ACTION= dans la balise <FORM > qui précise le mode de transmission
Voici comment envoyer le contenu du formulaire par e-mail,

<FORM ACTION="mailto:nom destinataire@nom serveur" METHOD="POST">
..................
<INPUT TYPE="SUBMIT" VALUE="Envoyer"
<INPUT TYPE="RESET" VALUE="Effacer"
</FORM>


Etude des événements onMouse sur une image en coordonnées

Revoir si nécessiaire l'écriture des balises correspondantes aux images cliquables, par exemple dans ce cours.

Ici, on détourne les hyperliens correspondant aux zones de l'image cliquable de façon à ce qu'un clic dans une zone appelle une fonction.
Pour cela, on n'affecte pas d'URL à l'attribut HREF de la balise <AREA>.
A la place, on affecte un appel d'une fonction (déjà déclarée) aux gestionnaires d'événements onMouseOver ou onMouseOut pour réagir au passage de la souris sur chacune des zones.
<MAP NAME="mon_image">
<AREA  HREF="" SHAPE="poly"  COORDS="x,y,..." onMouseOver="fct1()" >
<AREA  HREF="" SHAPE="circle"  COORDS="x,y,..."onMouseOver="fct2()" >
..........................................
</MAP>
..........................................
<IMG  SRC="fichier image.gif" USEMAP="#mon_image">

Dans l'exemple ci-dessous le passage de la souris sur la zone France de la carte, génére un événement onMouseOver qui provoque l'appel de la fonction affiche(France), tandis que le fait de quitter cette même zone associé à l'événement onMouseOut provoque l'appel de affiche(efface).

 <AREA COORDS="23,213,48,206,79,202,95,220,115,230,96,254,
   102,260,99,281,104,285,88,293,77,284,65,293,30,272,42,245,23,213"
   SHAPE="poly"  HREF="" onMouseOver="affiche(France)" onMouseOut="affiche(efface)">

Exemple (référence : JavaScript, Michel Dreyfus, édition Sybex)
QUELQUES ETATS D'EUROPE
 Pays :         

Population : hab.

Superficie : km2

Gouvernement :

Capitale :

Monnaie :