11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voila, jeune inscrit mais déja des problèmes.
Pour le formulaire de contact de mon site j'ai mis au point une fonction en javascript vérifiant les values des différents champs. Cependant rien n'y fait, la vérification ne marche pas ! Smiley ohwell ( Je pense mais ne suis pas, étant débutant, que cela vient de l'ID Smiley sweatdrop )

Voila mes codes:

Mon HTML corrigé d'apres le post n°2:
<!-- 
	- fef's website | V.4.x | Contact's HTML -
	
	 ______   ______     ______  
	/\  ___\ /\  ___\   /\  ___\ 
	\ \  __\ \ \  __\   \ \  __\ 
	 \ \_\    \ \_____\  \ \_\   
	  \/_/     \/_____/   \/_/ 
  
-->

<!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" />

		<title> - fef's website - Send a mail to fef -</title>	
		<style type="text/css" media="screen">@import "css/contact.css";</style>
		<script type="text/javascript" src="javascripts/contact.js"></script> 	
	</head>
	<body>
		<form id="formulaire-contact" method="POST" action="contact/moteur.php" onsubmit="return verificationFormulaireContact()" >
			<input id="pseudo" class="pseudo" onfocus="this.value=''" type="text" value="Votre pseudo / nom" /><br/>
			<input id="email"  class="email" onfocus="this.value=''" type="text" value="Votre adresse email" /><br/>
			<input id="site" class="site" onfocus="this.value=''" type="text" value="Votre site internet (facultatif)"><br/>
			<input id="sujet" class="sujet"  onfocus="this.value=''" type="text" value="Sujet" /><br/>
			<textarea id="message" onfocus="this.value=''" class="message">Votre message</textarea><br/>
			<input id="annuler" class="boutton" type="reset" value="Annuler" /><input id="envoyer" class="boutton" type="submit" value="Envoyer" />
		</form>
	</body>
</html>


Ma css:
/* 
	- fef's website | V.4.x | Contact's CSS -

	 ______   ______     ______  
	/\  ___\ /\  ___\   /\  ___\ 
	\ \  __\ \ \  __\   \ \  __\ 
	 \ \_\    \ \_____\  \ \_\   
	  \/_/     \/_____/   \/_/ 

*/

body, html
{
	margin: 0px;
	padding: 0px;
	text-align: center;
}

input.pseudo
{
	width: 385px;
	height: 15px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	margin-top: 15px; 
	padding-left: 25px;
	padding-top: 5px;
	padding-bottom: 3px;
	border: 1px solid #1c1c1c;
	background-color: transparent;
	background-image: url(../images/fond-champ-pseudo-contact.png);
}

input.email
{
	width: 385px;
	height: 15px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	margin-top: 20px; 
	padding-left: 25px;
	padding-top: 5px;
	padding-bottom: 3px;
	border: 1px solid #1c1c1c;
	background-color: transparent;
	background-image: url(../images/fond-champ-email-contact.png);
}

input.site
{
	width: 385px;
	height: 15px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	margin-top: 20px; 
	padding-left: 25px;
	padding-top: 5px;
	padding-bottom: 3px;
	border: 1px solid #1c1c1c;
	background-color: transparent;
	background-image: url(../images/fond-champ-site-contact.png);
}

input.sujet
{
	width: 385px;
	height: 15px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	margin-top: 20px; 
	padding-left: 25px;
	padding-top: 5px;
	padding-bottom: 3px;
	border: 1px solid #1c1c1c;
	background-color: transparent;
	background-image: url(../images/fond-champ-sujet-contact.png);
}

textarea.message
{
	width: 385px;
	height: 175px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	line-height: 15px;
	margin-top: 30px;  
	padding-left: 25px;
	padding-top: 5px;
	padding-bottom: 3px;
	border: 1px solid #1c1c1c;
	background-color: transparent;
	background-image: url(../images/fond-champ-message-contact.png);
	overflow: hidden;
}

input.boutton
{
	width: 75px;
	height: 25px;
	font-family: Trebuchet MS;
	font-size: 12px;
	font-weight: bold;
	text-align: left;
	color: #cccccc;
	margin-top: 30px; 
	margin-left: 15px;
	margin-right: 15px; 
	padding-left: 5px;
	padding-right: 5px;
	padding-top: 3px;
	padding-bottom: 2px;
	border: 1px solid #1c1c1c;
	text-align: center;
	background-color: transparent;
	background-image: url(../images/fond-champ-boutton-contact.png);
}


Et mon Javascript:
/* 
	- fef's website | V.4.x | Contact's JS -

	 ______   ______     ______  
	/\  ___\ /\  ___\   /\  ___\ 
	\ \  __\ \ \  __\   \ \  __\ 
	 \ \_\    \ \_____\  \ \_\   
	  \/_/     \/_____/   \/_/ 

*/

//<-- Verification -->

function verificationFormulaireContact()
{
	if (document.formulaire-contact.pseudo.value == "Votre pseudo / nom")
	{
		document.getElementById("input.pseudo").style.border = "1px solid #cc3333";
		return false;
  	}
  	else
  	if (document.formulaire-contact.email.value == "Votre adresse email")
	{
		document.getElementById("input.email").style.border = "1px solid #cc3333";
		return false;
  	}
  	else
  	if (document.formulaire-contact.email.value.indexOf("@") == -1)
	{
		document.getElementById("input.email").style.border = "1px solid #cc3333";
		return false;
	}
  	else
  	if (document.formulaire-contact.site.value == "Votre site internet (facultatif)")
	{
		document.formulaire-contact.site.value == "Aucun";
  	}
  	else
  	if (document.formulaire-contact.sujet.value == "Sujet")
	{
		document.getElementById("input.sujet").style.border = "1px solid #cc3333";
		return false;
  	}
  	else
  	if (document.formulaire-contact.message.value == "Votre message")
	{
		document.getElementById("input.message").style.border = "1px solid #cc3333";
		return false;
  	}
  	else	
	return true;
}


(Et autre petit problème de PHP, comment peut on lancer une fonction en javascript directement ? )

Merci de votre aide.
fef
Modifié par iFef (19 Jul 2007 - 21:12)
Bonjour,

Vu la déclaration de ton DocType l'attribut "name" de la balise form ne peut pas être utilisé remplace déjà name par id
Ensuite, il faudrait que tu revois la façon dont tu utilises getElementById()

et d'autre part si tu utilises cela il faudrait que tes éléments de formulaire aient un id associé :
exemple faire cette modification et les autres du même type :


input id="pseudo" class="pseudo" type="text" value="Votre pseudo / nom" />


En n'oubliant pas de refermer la balise:
<input ... />

Modifié par rafale29 (19 Jul 2007 - 18:04)
Voila code corrigé:
<!-- 
	- fef's website | V.4.x | Contact's HTML -
	
	 ______   ______     ______  
	/\  ___\ /\  ___\   /\  ___\ 
	\ \  __\ \ \  __\   \ \  __\ 
	 \ \_\    \ \_____\  \ \_\   
	  \/_/     \/_____/   \/_/ 
  
-->

<!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" />

		<title> - fef's website - Send a mail to fef -</title>	
		<style type="text/css" media="screen">@import "css/contact.css";</style>
		<script type="text/javascript" src="javascripts/contact.js"></script> 	
	</head>
	<body>
		<form id="formulaire-contact" method="POST" action="contact/moteur.php" onsubmit="return verificationFormulaireContact()" >
			<input id="pseudo" class="pseudo" onfocus="this.value=''" type="text" value="Votre pseudo / nom" /><br/>
			<input id="email"  class="email" onfocus="this.value=''" type="text" value="Votre adresse email" /><br/>
			<input id="site" class="site" onfocus="this.value=''" type="text" value="Votre site internet (facultatif)"><br/>
			<input id="sujet" class="sujet"  onfocus="this.value=''" type="text" value="Sujet" /><br/>
			<textarea id="message" onfocus="this.value=''" class="message">Votre message</textarea><br/>
			<input id="annuler" class="boutton" type="reset" value="Annuler" /><input id="envoyer" class="boutton" type="submit" value="Envoyer" />
		</form>
	</body>
</html>


Cependant le problème est toujours présent... Smiley sweatdrop
a écrit :
il faudrait que tu revois la façon dont tu utilises getElementById()

Que veux tu dire par la ?
Merci
Modifié par iFef (19 Jul 2007 - 21:10)
La fonction getElementById prend en paramètre juste l'id, pas la balise en plus :
document.getElementById('pouet')
FlorentG a écrit :
La fonction getElementById prend en paramètre juste l'id, pas la balise en plus :
document.getElementById('pouet')

Le problème ne vient pas de la car si je place une alert, celle-ci ne fonctionne pas. Je pense que ca vient plutot de la reconnaissance du champ.
(Voila comment je place l'alerte:
if (document.formulaire-contact.pseudo.value == "Votre pseudo / nom")
	{
		alert("test");
		document.getElementById("input.pseudo").style.border = "1px solid #cc3333";
		return false;
  	}


Par acquit de concience j'ai quand meme essayé, mais ce la ne fonctionne pas. Deplus dans une ancienne version de ce formulaire tout fonctionnait a merveille.


(Voila ses sources:
Le HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
		<title>- Send a mail to fef -</title>
		<style type="text/css" media="screen">@import "css/frames_styles.css";</style>
		<style type="text/css" media="screen">@import "css/formulaires_styles.css";</style>
		<script type="text/javascript" src="javascripts/scripts_contact.js"></script>              
	</head>
	<body>
		<br/><br/>
		<form name='formulaire' method='POST' action='contact.php' onSubmit="return verification()">
			<input class="contact" name="nom" type="text" value="Votre nom" ><br/><br/><br/>
			<input class="contact" name="email" type="text" value="Votre email" ><br/><br/><br/>
			<input class="contact" name="sujet2" type="text" value="Sujet" ><br/><br/><br/>
			<textarea name="texte" >Votre message</textarea><br/><br/><br/>
			<input class='boutton' type='reset' value='Annuler'>   <input class='boutton' type='submit' value='Envoyer'> 
		</form>
	</body>
</html>	


Le Javascript:
function verification()
{
	if(document.formulaire.nom.value == "Votre nom")
	{
		alert("Veuillez entrer votre nom !");
		document.formulaire.nom.focus();
		return false;
  	}
	else
	if(document.formulaire.email.value == "Votre email")
	{
		alert("Veuillez entrer votre email !");
   		document.formulaire.email.focus();
   		return false;
	}
	else
	if(document.formulaire.sujet2.value == "Sujet")
	{
		alert("Veuillez entrer un sujet !");
		document.formulaire.sujet2.focus();
		return false;
	}
	else
	if(document.formulaire.email.value.indexOf('@') == -1)
	{
		alert("Votre email n'est pas valable !");
		document.formulaire.email.focus();
		return false;
	}
	else
	if(document.formulaire.texte.value == "Votre message")
	{
		alert("Veuillez entrer votre message !");
		document.formulaire.texte.focus();
		return false;
	}
	else
	return true
}


D'ailleur je ne vois pas de réelles différences à part l'encodage, le doctype et les ' rempalcés par des "... )

Je vous remerci de votre rapidité, inégalée sur les autres forums Smiley biggrin
Tu peux pas accéder à une propriété qui a un tiret dans le nom, style :
document.formulaire-contact.pseudo.value

Lorsque JS rencontre ça, il transforme en :
document.formulaire - contact.pseudo.value

Il cherche donc à faire la soustraction Smiley confus

Remplace par :
document['formulaire-contact'].pseudo.value


Et encore mieux grâce à l'id :
var pseudo = document.getElementById('pseudo');
if(pseudo.value == 'Votre pseudo / nom') {
  pseudo.style.border = '1px solid #c33';
  return false;
}


:)
FlorentG a écrit :
Tu peux pas accéder à une propriété qui a un tiret dans le nom, style :
document.formulaire-contact.pseudo.value

Lorsque JS rencontre ça, il transforme en :
document.formulaire - contact.pseudo.value

Il cherche donc à faire la soustraction Smiley confus

Remplace par :
document['formulaire-contact'].pseudo.value


Et encore mieux grâce à l'id :
var pseudo = document.getElementById('pseudo');
if(pseudo.value == 'Votre pseudo / nom') {
  pseudo.style.border = '1px solid #c33';
  return false;
}


:)


Marche pas ! Smiley sweatdrop
Par contre un pôte a trouvé ! (Il s'est bien amélioré depuis le temps => http://forum.alsacreations.com/topic.php?fid=1&tid=9910&s= Smiley lol )
La solution:
/* 
	- fef's website | V.4.x | Contact's JS -

	 ______   ______     ______  
	/\  ___\ /\  ___\   /\  ___\ 
	\ \  __\ \ \  __\   \ \  __\ 
	 \ \_\    \ \_____\  \ \_\   
	  \/_/     \/_____/   \/_/ 

*/

//<-- Verification -->

function verificationFormulaireContact()
{
	var testeur = true;
	if (document.getElementById('formulaire-contact').pseudo.value == "Votre pseudo / nom")
	{
		document.getElementById("pseudo").style.border = "1px solid #cc3333";
		testeur = false;
  	}
  	if (document.getElementById('formulaire-contact').email.value == "Votre adresse email")
	{
		document.getElementById("email").style.border = "1px solid #cc3333";
		testeur = false;
  	}
  	if (document.getElementById('formulaire-contact').email.value.indexOf("@") == -1)
	{
		document.getElementById("email").style.border = "1px solid #cc3333";
		testeur = false;
	}
  	if (document.getElementById('formulaire-contact').site.value == "Votre site internet (facultatif)")
	{
		document.getElementById("site").value = "Aucun";
  	}
  	if (document.getElementById('formulaire-contact').sujet.value == "Sujet")
	{
		document.getElementById("sujet").style.border = "1px solid #cc3333";
		testeur = false;
  	}
  	if (document.getElementById('formulaire-contact').message.value == "Votre message")
	{
		document.getElementById("message").style.border = "1px solid #cc3333";
		testeur = false;
  	}
  	if (testeur)
  		return true;
  	else
  		return false;
}


Encore MERCI de vos aides...
fef
Modifié par iFef (19 Jul 2007 - 23:24)
Salut;

Le test avec indexOf c'est totalement inutile :

-Un email sous la forme moi@@@@@@@.com fonctionnera
La ligne document.getElementById("sujet").style.border = "1px solid #cc3333"; tu la répète 100 000 fois, quel est l'interet?

function setBorder(element) {
        document.getElementById(element).style.border = "1px solid #cc3333";
testeur = false;
}


puis

setBorder("email");