Introduction to JavaScript
Chapitre 7




Les données des formulaires sont très importantes dans certaines pages Web, puisqu'elles sont toujours renvoyées vers le serveur. JavaScript offre la possibilité de contrôler la validité de ces informations avant leur transfert. Le veux vous montrer tout d'abord de quelle manière les formulaires peuvent être validés. Ensuite nous verrons les possibilités offertes pour envoyer des informations depuis JavaScript ou HTML.

Première étape: le script. La page HTML devra contenir deux objets text, dans lesquels l'utilisateur inscrira son nom puis son adresse e-mail. Vous pouvez écrire n'importe quoi dans ces éléments puis valider avec le bouton. Vous pouvez aussi presser le bouton sans rien écrire dans les cases.

Entrez votre nom:

Entrez votre adresse e-mail:

En ce qui concerne le premier élément du formulaire, vous recevrez un message d'erreur lorsque la case restera vide. N'importe quelle entrée est considérée comme valide. Ceci n'empêche en rien l'utilisateur de fournir un faux nom. Le navigateur accepte même les nombres. Si vous tapez '17', vous obtiendrez 'Salut 17!.
Le second élément du formulaire est un peu plus complexe. Essayez d'entrer une quelconque chaîne de caractères telle que votre nom et vous obtiendrez un message d'erreur (sauf si vous possédez un @ dans votre nom...). Le critère de validation de l'adresse e-mail entrée réside dans le caractère @. Chacun sait que les adresses e-mail Internet comportent un @, il semble donc raisonnable de vérifier la présence de ce dernier, même si cette dernière n'est que peu fiable (un simple @ convient pour passer cette détection).

Mais à quoi ressemble le script commandant ces deux objets et leur validation. Le voici:

<html>
<head>
<script language="JavaScript">
<!-- Masque

function test1(form) {
  if (form.text1.value == "")
    alert("Veuillez taper une chaîne de caractères SVP!")
  else { 
   alert("Salut "+form.text1.value+"! Donnée du formulaire ok!");
  }
}

function test2(form) {
  if (form.text2.value == "" || 
      form.text2.value.indexOf('@', 0) == -1) 
        alert("Adresse e-mail non valide!");
  else alert("OK!");
}
// -->
</script>
</head>

<body>
<form name="first">
Entrez votre nom:<br>
<input type="text" name="text1">
<input type="button" name="button1" value="Validation" onClick="test1(this.form)">
<P>
Entrez votre adresse e-mail:<br>
<input type="text" name="text2">
<input type="button" name="button2" value="Validation" onClick="test2(this.form)">
</body>

Etudions tout d'abord le code HTML se situant dans la section ... On a seulement créer deux objets text et deux boutons. Les boutons font appel aux fonctions test1(...) et test2(...) en fonction du bouton concerné. Le paramètre transmis à ces fonctions, this.form, leur permet d'utiliser le bon objet par la suite.
La fonction test1(form) vérifie si la chaîne est vide par l'intermédiaire de l'instruction if (form.text1.value == "")... . 'form' est la variable recevant le paramètre 'this.form' transmis lors de l'appel à cette fonction. On analyse les informations entrées dans cet objet grâce à la propriété 'value' combinée avec form.text1. on compare cette chaîne avec "" pour savoir si elle est vide. Si c'est le cas, l'utilisateur obtient un message d'erreur puisque aucune entrée n'a été tapée. Sinon c'est un 'ok!' que reçoit l'utilisateur en guise de validation.
Le problème ici réside dans la possibilité de l'utilisateur à ne taper que des espaces, ce qui serait considéré comme une entrée valide! Si vous le voulez, vous pouvez tester ces possibilités et les exclure. Je crois cela aisé avec toutes les informations dont nous disposons actuellement.
Maintenant, jetons un oeil à la fonction test2(form), qui, pour les même raisons, compare la chaîne inscrite avec "". Mais nous avons tout de même ajouté quelque chose à la commande if. Le || est appelé opérateur OU (OR). Vous l'avez étudié dans le chapitre 6 de cette introduction.
La commande if vérifie si l'une des deux comparaisons renvoi true (vrai). Il suffit que l'une des expressions soit évaluée à true pour que les instructions suivantes soient exécutées. Et par conséquent un message d'erreur sera renvoyé si votre chaîne est vide ou si elle ne comporte pas de @. Ce que vérifie le second membre de la comparaison.



Quelles sont les différentes possibilités existantes pour transmettre le contenu des formulaires? La voie la plus simple est l'envoi du formulaire sous forme d'un e-mail. C'est la méthode que nous allons utiliser. Si vous désirez un traitement automatique, immédiat, s'accompagnant d'une réaction adaptée de la part du serveur, le e-mail s'exclut de lui-même et il vous reste les scripts CGI pour l'instant. CGI devient indispensable dans le cas de moteurs de recherches tels que Yahoo où l'utilisateur obtient les résultats juste après avoir rempli le formulaire. Il ne doit pas attendre que les administrateurs de ce serveur lisent sa requête et renvoi les informations demandées. Ceci est fait automatiquement par le serveur. JavaScript n'a pas les capacités de faire de telles choses. Même si vous désirez créer une liste de clients, vous ne pourriez pas obliger le serveur à mettre à jour automatiquement les informations dans une page HTML seulement avec JavaScript. Pour cela il vous faut CGI. Cependant, pour constituer cette liste il est toujours possibles aux gens de répondre par e-mail. Il vous faudra traiter les réponses manuellement. Ceci est raisonnable si vous n'attendez pas 1000 réponses par jour.
Ce script n'est constitué que de HTML. JavaScript n'intervient pas ici! Sauf si vous voulez contrôler l'intégrité des informations avant leur transfert. J'ai dû utiliser la commande mailto: que les vieux navigateurs ne supportent pas.

<FORM METHOD=POST ACTION="mailto:votre_email@vient.ici">
<H3>Aimez vous cette page?</H3>
  <INPUT NAME="choice" TYPE="RADIO" VALUE="1">En aucun cas.<BR>
  <INPUT NAME="choice" TYPE="RADIO" VALUE="2" CHECKED>C'est une perte de temps.<BR>
  <INPUT NAME="choice" TYPE="RADIO" VALUE="3">C'est le plus mauvais site jamais visité.<BR>
  <INPUT NAME="submit" TYPE="SUBMIT" VALUE="Send">
</FORM>
Par ce moyen, les réponses vous arrivent par e-mail. Seul problème, vous recevrez des messages qui sembleront énigmatiques. Certaines fois les espaces seront remplacés par des '+', d'autres fois ce seront des '%20'. Cela+ressemblera+donc+à+ceci+à+peu+de+choses+près. Il existe quelques petits programmes sur le Net qui remettront de l'ordre dans vos message mais vous pouvez aussi rajouter ENCTYPE="text/plain" dans la balise <FORM METHOD=...>.



Il existe un autre truc qui rendra vos formulaires un peu plus sympathiques. Vous pouvez définir quel élément obtiendra le focus initialement ou même ordonner au navigateur de focaliser l'élément comportant une donnée invalide. Ceci signifie que le navigateur donnera le focus à tel ou tel élément et que l'utilisateur n'aura pas à clickez sur le formulaire avant de taper quelque chose. On peut le faire grâce à la partie de script suivante:

function setfocus() {
        document.first.text1.focus();
        return;
}

Ce script devrait donner le focus au premier objet text montré dans le script précédant. Vous devez spécifier le nom du formulaire l'on a surnommé first ainsi que celui de l'objet en question appelé text1. Si vous voulez focaliser cet élément dès le chargement de la page, utilisez la propriété onLoad de la balise <body>. Voici par exemple ce à quoi cela ressemble:

<body onLoad="setfocus()">


Sommaire - Chapitre 1 - Chapitre 2 - Chapitre 3 - Chapitre 4 - Chapitre 5 - Chapitre 6

Last changed: 25.février'97 - © 1996 by Stefan Koch - 1997 Traduction de Qaghan