11548 sujets

JavaScript, DOM et API Web HTML5

Hello à tous
Bon je suis nouveau ici, je découvre la programmation et me suis vite rendu compte que ce site est une des bibles !
Ceci est donc mon premier post, mais sûrement pas le dernier.

Alors voilà... comme j'apprends à programmer, je souhaite prendre les bons réflexes et passer direct au xhtml strict. Or j'ai un problème pour valider la page à cause du fameux attribut name (pour un formulaire).

Après avoir parcouru ce forum, j'ai tenté de remplacer cet attribut par un id tout en utilisant la fonction getelementbyid. Ca valide, mais mon script js ne fonctionne plus. C'est à dire que le script de vérification envoie bien l'alerte nécessaire mais semble quand même envoyer les données, ce qu'il ne faut pas et qui ne se passait pas avec l'attribut name.

Et là... je suis coincé...

alors... si quelqu'un pouvait m'aider sur ce coup là, ce serait vraiment top.

Voici le code :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="imagetoolbar" content="false" />
<meta name="description" content="Mettre la description du site" /> 
<meta name="keywords" content="Mettre les mots clés" />
<title>Mon formulaire.</title>
<link href="contact.css" rel="stylesheet" type="text/css" media="screen" />

<script type="text/javascript" >
function verification()
{
 if(document.getElementById('formulaire').nom.value == "")  {
   alert("Veuillez entrer votre nom svp");
   document.formulaire.nom.focus();
   return false;
  }
   else
 if(document.getElementById('formulaire').prenom.value == "") {
   alert("Veuillez entrer votre prenom svp");
   document.formulaire.prenom.focus();
   return false;
  }
   else
 if(document.getElementById('formulaire').email.value == "") {
   alert("Veuillez entrer votre adresse electronique svp");
   document.formulaire.email.focus();
   return false;
  }
  else
 if(document.getElementById('formulaire').email.value.indexOf('@') == -1) {
   alert("Ce n'est pas une adresse electronique, verifiez la svp");
   document.formulaire.email.focus();
   return false;
  
  }
  else
 if(document.formulaire.texte.value == "") {
   alert("Veuillez entrer le texte de votre message svp");
   document.formulaire.texte.focus();
   return false;
  }
return true
}
</script>
</head>
<body>
<form id="formulaire" action="traitement.php" method="post" onsubmit="return verification()">

<table cellspacing="0">
<tr><th colspan="2">Formulaire de contact</th></tr>
<tr><td class="info">Votre nom : </td><td class="champ">
<input name="nom" type="text" size="50" class="writein"/></td></tr>
<tr><td class="info">Votre pr&eacute;nom : </td><td class="champ">
<input name="prenom" type="text" size="50" class="writein"/></td></tr>
<tr><td class="info">Votre email</td><td class="champ">
<input name="email" type="text" size="50" class="writein"/></td></tr>
<tr><td class="contenu">Votre message</td><td class="contenant"><textarea name="texte" cols="50" rows="20" class="writein"></textarea></td></tr>
<tr id="nepasimprimer"><td class="lesboutons"><input name="annuler" type="reset" value="Annuler"/></td><td>
<input name="soumettre" type="submit" value="Envoyer"/></td></tr>
</table>
</form>
</body>
</html>


Merci d'avance pour votre aide
vinny
Modifié par vinny38 (22 Jan 2010 - 16:11)
c'est le name qui prime pour les forumulaires et getElementById ne permet pas d'acceder aux élément enfants.

Personnellement je recommanderais une syntaxe plus rigoureuse:

document.forms['formulaire'].elements['nom'].value


avec
<form id="formulaire" name="formulaire" ...

Modifié par SpaceFrog (22 Jan 2010 - 17:06)
Bonjour,

Déjà pour commencer ton code HTML laisse à désirer. Il te manque des labels en bonne et due forme pour tes différents champs. En zappant la partie «tableau de mise en page», ton code c'est:
Votre email:
<input name="email" />

Alors que tu devrais avoir:
<label for="id_email">Votre email:</label>
<input id="id_email" name="email" />
(tu peux utiliser "email" aussi comme id, j'ai fait différemment juste pour montrer que l'attribut for doit faire référence à un id).

Une fois que ton formulaire sera corrigé, tu t'apercevras que tu as des id pour chaque champ de formulaire, et tu pourras récupérer directement le champ qui va bien en passant par le DOM:
document.getElementById('id_email')...


Remarques générales:
- Je suppose que tu as déjà une vérification du formulaire côté serveur?
- Il y a plus subtil que des alert pour indiquer à l'utilisateur que sa saisie n'est pas bonne.
- Le type de validation que tu fais ici en JavaScript n'apporte aucun intérêt par rapport à une validation côté serveur lors de la soumission du formulaire. La validation en JavaScript est surtout utile pour donner une information à l'utilisateur avant qu'il n'envoie le formulaire.
Modifié par Florent V. (23 Jan 2010 - 19:08)
Hello

bien, merci pour ces réponses...
c'est encore un peu abscons compte tenu de mon niveau de programmation, mais je vais me pencher sur la question.
Mais Florent quand tu dis qu'il y a plus subtil que des "alert", peux-tu préciser à quoi tu fais allusion ?

merci a tous 2
vinny38 a écrit :
Mais Florent quand tu dis qu'il y a plus subtil que des "alert", peux-tu préciser à quoi tu fais allusion ?

Au fait de rajouter l'avertissement directement dans la page, à côté du champ de formulaire laissé vide ou mal rempli.

Il doit y avoir quelques bons tutoriels complets sur le sujet sur le Web, notamment en anglais. En cherchant un peu tu devrais trouver des exemples. Exemples de requêtes peut-être pertinentes "effective form design", "form webdesign with JavaScript", etc.
vinny38 a écrit :
Hello à tous
Bon je suis nouveau ici, je découvre la programmation et me suis vite rendu compte que ce site est une des bibles !
Ceci est donc mon premier post, mais sûrement pas le dernier.

Alors voilà... comme j'apprends à programmer, je souhaite prendre les bons réflexes et passer direct au xhtml strict. Or j'ai un problème pour valider la page à cause du fameux attribut name (pour un formulaire).

Après avoir parcouru ce forum, j'ai tenté de remplacer cet attribut par un id tout en utilisant la fonction getelementbyid. Ca valide, mais mon script js ne fonctionne plus. C'est à dire que le script de vérification envoie bien l'alerte nécessaire mais semble quand même envoyer les données, ce qu'il ne faut pas et qui ne se passait pas avec l'attribut name.

Et là... je suis coincé...

alors... si quelqu'un pouvait m'aider sur ce coup là, ce serait vraiment top.

Voici le code :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="imagetoolbar" content="false" />
<meta name="description" content="Mettre la description du site" /> 
<meta name="keywords" content="Mettre les mots clés" />
<title>Mon formulaire.</title>
<link href="contact.css" rel="stylesheet" type="text/css" media="screen" />

<script type="text/javascript" >
function verification()
{
 if(document.getElementById('formulaire').nom.value == "")  {
   alert("Veuillez entrer votre nom svp");
   document.formulaire.nom.focus();
   return false;
  }
   else
 if(document.getElementById('formulaire').prenom.value == "") {
   alert("Veuillez entrer votre prenom svp");
   document.formulaire.prenom.focus();
   return false;
  }
   else
 if(document.getElementById('formulaire').email.value == "") {
   alert("Veuillez entrer votre adresse electronique svp");
   document.formulaire.email.focus();
   return false;
  }
  else
 if(document.getElementById('formulaire').email.value.indexOf('@') == -1) {
   alert("Ce n'est pas une adresse electronique, verifiez la svp");
   document.formulaire.email.focus();
   return false;
  
  }
  else
 if(document.formulaire.texte.value == "") {
   alert("Veuillez entrer le texte de votre message svp");
   document.formulaire.texte.focus();
   return false;
  }
return true
}
</script>
</head>
<body>
<form id="formulaire" action="traitement.php" method="post" onsubmit="return verification()">

<table cellspacing="0">
<tr><th colspan="2">Formulaire de contact</th></tr>
<tr><td class="info">Votre nom : </td><td class="champ">
<input name="nom" type="text" size="50" class="writein"/></td></tr>
<tr><td class="info">Votre pr&eacute;nom : </td><td class="champ">
<input name="prenom" type="text" size="50" class="writein"/></td></tr>
<tr><td class="info">Votre email</td><td class="champ">
<input name="email" type="text" size="50" class="writein"/></td></tr>
<tr><td class="contenu">Votre message</td><td class="contenant"><textarea name="texte" cols="50" rows="20" class="writein"></textarea></td></tr>
<tr id="nepasimprimer"><td class="lesboutons"><input name="annuler" type="reset" value="Annuler"/></td><td>
<input name="soumettre" type="submit" value="Envoyer"/></td></tr>
</table>
</form>
</body>
</html>


Merci d'avance pour votre aide
vinny



Smiley biggrin Voici le bon code avec un ID au form (<form method="post" action="contact.php" id="formulaire" onsubmit="return validation();">)

<script type="text/javascript">
//<![CDATA[
function validation()
{
var Email = document.forms['formulaire'].Email.value;
if (Email.search(/^[_a-z0-9-]+(.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(.[a-z0-9]{2,4})*$/) == -1)
{
alert ('Entrez une adresse Email valide');
document.forms['formulaire'].Email.focus();
return false;
}

if(document.forms['formulaire'].Nom.value == "")
{
alert ('Veuillez entrer votre Nom ou Pseudo');
document.forms['formulaire'].Nom.focus();
return false;
}

if(document.forms['formulaire'].Commentaire.value == "")
{
alert ('Veuillez entrer un commentaire Obligatoire');
document.forms['formulaire'].Commentaire.focus();
return false;
}
else {return true;}
}
//]]>
</script>

Smiley cligne