Javascript et les formulaires
Transcription
Javascript et les formulaires
Javascript et les formulaires Principe général Les éléments de formulaire sont des objets javascript. Nous allons voir ici comment accéder par javascript aux objets du formulaire. Supposons le formulaire suivant : <FORM name="general"> <INPUT type="text" name="champ1" value="Valeur initiale"> </FORM> Accéder au formulaire Le formulaire est un élément de l'objet document. Pour accéder au formulaire general, il faut écrire : • • • document.forms["general"] ou document.forms[0] ou document.general forms est le tableau des formulaires de document. On peut accéder à un formulaire par son nom ou par son indice (commençant à 0), via le tableau elements ou directement par son nom Accéder à un élément Pour accéder maintenant à la zone de texte, on écrit : • • • • document.forms["general"].elements["champ1"] ou document.forms["general"].elements[0] ou document.forms["general"].champ1 ou document.general.champ1 elements est le tableau de tous les éléments du formulaire. On peut accéder à un élément par son nom ou par son indice, ou directement par son nom. Remarques : 1. Il est préférable d'utiliser le nom des éléments, plutôt que les indices : les noms sont indépendants de l'organisation du formulaire. 2. Les tableaux forms et elements peuvent sembler inutiles dans les exemples ci-dessus. Observez ce script pour vous convaincre du contraire : var nom_du_champ="champ1"; document.forms["general"].elements[nom_du_champ] Ici, on peut accéder à un élément de formulaire dont le nom est contenu dans une variable javascript. Manipuler les propriétés d'un élément Une fois que l'élément est atteint, il est possible de manipuler ces propriétés. Par exemple, créez le formulaire ci-dessus dans lequel vous allez placer le champ pour placer dans la zone de texte le mot "NOUVEAU". Dans le head créez une fonction dans laquelle vous allez mettre le code ci-dessous et que vous appellerez sur l’événement onclick d’un bouton. document.general.elements["champ1"].value="NOUVEAU" ; Appeler une méthode sur un élément Pour donner le focus au champ texte du haut de cette page, il faut appeler la méthode focus() sur cet élément. document.general.champ1.focus() ; Vous pouvez par exemple créer une autre fonction que vous allez appeler dans la balise body sur l’événement onload L'objet this Il est fastidieux d'accéder aux éléments de formulaire par toute la chaîne document.forms.elements. Un objet JavaScript this permet de raccourcir ce chemin d'accès. this représente l'objet javascript en cours. contenu Donnez le focus à cette zone de texte, un message apparaît dans la barre de statut pour indiquer son nom. Le message disparaît quand le champ perd le focus. Voici le code source simplifié par this : <FORM name="formfocus"> <INPUT type="text" name="champtexte" value="contenu" onFocus="window.status=this.name" onBlur="window.status=''"> </FORM> La variable window.status contient le message avec le nom du champ obtenu par : this.name équivalent ici à document.formfocus.champtexte.name Encore un exemple avec this Reprenons notre champ texte qui peut voir son contenu changé lors du clic sur un bouton : Valeur initiale <FORM> <INPUT type="text" name="zonedetexte" value="Valeur initiale"> <INPUT type="button" value="Changer le contenu" onClick=' this.form.zonedetexte.value="NOUVEAU" '> </FORM> Grâce à this.form, on peut accéder au formulaire de l'élément en cours. Le chemin pour accéder à zonedetexte est ensuite classique. L'accès aux éléments de type INPUT Les zones de texte La principale action en javascript sur une zone de texte est de manipuler son contenu. Imaginons un formulaire appelé monform qui possède un champ texte appelé monchamp. On accède au contenu du champ par : document.monform.monchamp.value Il faut bien penser à ajouter la propriété .value pour accéder au contenu. Les boutons Un bouton sert principalement à déclencher une action javascript. La propriété value contient le libellé du bouton. Comme pour une zone de texte, ce libellé est accessible. Les cases à cocher Pour détecter qu'une case est cochée, il faut utiliser sa propriété checked Majeur Etudiant Voici le code de l'exemple : <FORM> <INPUT type="checkbox" name="majeur">Majeur <INPUT type="checkbox" name="etudiant">Etudiant <INPUT type="button" value="Tester" onClick="alert('Majeur : '+this.form.majeur.checked+'\nEtudiant : '+this.form.etudiant.checked);"> </FORM> checked est de type booléen. Il contient true pour vrai et false pour faux. Les radio-boutons Imaginons ce sondage : Vous utilisez comme système d'exploitation : Windows 95 Windows 98 Windows NT Linux Autre La gestion des radio-boutons est assez complexe. Voici le code HTML de ce sondage : <FORM> <INPUT type="radio" name="os" value="Windows 95" checked>Windows 95 <INPUT type="radio" name="os" value="Windows 98">Windows 98 <INPUT type="radio" name="os" value="Windows NT">Windows NT <INPUT type="radio" name="os" value="Linux">Linux <INPUT type="radio" name="os" value="Autre">Autre <INPUT type="button" value="Tester" onClick="testerRadio(this.form.os)"> <SCRIPT language="javascript"> function testerRadio(radio) { for (var i=0; i<radio.length;i++) { if (radio[i].checked) { alert("Système = "+radio[i].value) } } } </SCRIPT> La déclaration du formulaire crée un groupe de radio-boutons liés : le nom du groupe est os. La fonction javascript a comme paramètre le groupe des radio-boutons. Une boucle parcourt la liste des boutons du groupe. On repère le bouton qui a la propriété checked à true et on affiche alors la valeur correspondante. L'accès aux éléments de type SELECT Libellé ligne 1 <SELECT name="liste" size=1> <OPTION value="valeur ligne <OPTION value="valeur ligne <OPTION value="valeur ligne <OPTION value="valeur ligne </SELECT> 1">Libellé 2">Libellé 3">Libellé 4">Libellé ligne ligne ligne ligne 1</OPTION> 2</OPTION> 3</OPTION> 4</OPTION> En JavaScript, la structure d'un élément de type SELECT reprend ce schéma : name Nom de la liste selectedIndex Indice de la ligne sélectionnée (ligne 1 : indice=0) options Tableau des lignes length Nombre de lignes value Valeur d'une ligne text Libellé d'une ligne Voici le code des événements des boutons. Pour récupérer l'indice la ligne sélectionnée : this.form.liste.selectedIndex Pour récupérer le nombre de lignes : this.form.liste.options.length Pour récupérer la valeur de la ligne sélectionnée : this.form.liste.options[this.form.liste.selectedIndex].value L'accès aux éléments de type TEXTAREA Une zone de texte multi-lignes a comme propriété principale value qui contient le texte de la zone. Ligne 1 Ligne 2 Dernière ligne Contenu brut Contenu traité Pour récupérer le contenu de la zone, on utilise le classique : document.monform.mazone.value Le "contenu traité" est obtenu par l'appel de la fonction escape() qui convertit tous les caractères spéciaux et non visibles (tabulations, retour à la ligne, ...). Dans notre exemple, quand "Contenu traité" est coché, on affiche : escape(document.monform.mazone.value) La fonction inverse est unescape().