11488 sujets

JavaScript, DOM et API Web HTML5

Bonjour

Je vais avoir examen de javascript et il y a un détail que je ne comprend pas bien à propos de deux fonctions.

Voici le code javascript de ma page


<script type="text/javascript">

function email_ok(email) {
	var ok = false ;
	var p1 = email.indexOf("@") ;
	var p2 = email.lastIndexOf(".") ;
	if (p1 > -1 && p2 > -1 && p1 < p2) {
		ok = true ;
	}
	
	return ok ;
}

function nom_ok(nom) {
	var ok = nom.length > 0 ;

	return ok ;
}

function validation(f){
	var ok = nom_ok(f.nom_txt.value) 
		&& email_ok(f.email_txt.value) ;
	return ok ;	
}

</script>	



Et voici mon simple formulaire(nom, prénom, email) en html


<body>

<form id="abonnement_frm" 
	method="get" 
	action="grandmerci.html"
	onsubmit="return validation(this)">
 
<p><label for="nom_txt">Nom</label>
    <input type="text" id="nom_txt" name="nom_txt" /></p>

<p><label for="prénom_txt">Prénom</label>
    <input type="text" id="prénom_txt" name="prénom_txt" /></p>	
<p><label for="email_txt">Email</label>

<input type="text" id="email_txt" name="email_txt" /></p>
<p><input value="Envoyer" type="submit" /></p>

</form>
</body>


Ce que je ne comprends bien pas c'est comment est ce que la fonction "function nom_ok(nom)" et la fonction "function validation(f)" fonctionnent ?
Car je ne vois aucune conditions dessus juste des & .


Merci à vous
Modifié par donfino (04 Jun 2007 - 15:38)
visiblement la fonction nom_ok ne fait que verifier que le champ nom_txt a été renseigné.

quand la chaine aura une longueur strictement positive la condition retourna true sinon false.

la fonction validation quand a elle renvoie le resultat des deux fonction et fais un && ( ET ) des deux booléens.

algebre booléen de base : vrai et vrai => vrai le reste rend faux.

voila
Modifié par CPascal (04 Jun 2007 - 17:19)
merci à toi

on met dans "nom" une valeur plus grande que 0 mais pourquoi on la défini nous mêmes ? Ca ne devrait être défini apres que l'utilisateur ait entré son nom ?

Ensuite la fonction validation sans "if" elle sait que si c est vrai on valide. C est la que je coince un peu.

merci
pourtant le if n'est pas necessaire

si c'est vrai on rend vrai si c'est faux on rend faux. le raccourci d'ecriture s'impose de lui même.

au lieu de tester la valeur de nom_ok(f.nom_txt.value) && email_ok(f.email_txt.value) on met cette valeur dans une variable et on la retourne.

nom contient f.nom_txt.value ce n'est pas une valeur plus grande que zero c'est le texte qui est renseigné dans le formulaire.

ce n'est pas toi qui initialise le nom c'est la fonction validation appelée quand le formulaire est validé par l'utilisateur.

si j'ai ecris patati patata c'est donc "patati patata". nom.lenght rend alors 13 car il y a 13 caractéres.
Modifié par CPascal (04 Jun 2007 - 17:44)
ça à l'air assez bête à comprendre mais j'éprouve quelques difficultées.

En gros quand on clic sur submit il vérifie la fonction"function email_ok(email)" qui regarde si il y a un @ et un point après l'arobase et il vérifié la fonction "function nom_ok(nom)" qui regarde si le nom est plus grand que 0 (donc si au moins un caractère est entré).

Donc la fonction validation en français veut dire :

si email_ok est vrai et nom_ok est vrai alors il retourne ok dans (f) et le formulaire est accepté ?

Un grand merci pour tes mumières Smiley biggrin
a écrit :
si email_ok est vrai et nom_ok est vrai alors il retourne ok dans (f) et le formulaire est accepté ?


oui.

et si une des fonctions retourne false alors validation retourne false et la soumission du formulaire est annulée.
Modifié par CPascal (04 Jun 2007 - 18:05)
Je sais bien que c'est un peu hors sujet mais la fonction de validation de l'adresse email est vraiment basique et ne vaut rien.
C'est peut être bon pour un cas d'école mais hélas ce même algo est retrouvé trop souvent sur des sites.

Un bonne fonction de validation de mail serait plutôt:


//--------------------------------------------------------------------------------
// FUNCTION : Return True if the syntax of the email is correct
// PARAMETER :
//	EMAIL : The email to check
//--------------------------------------------------------------------------------
function checkEmail(email) {
	email = email + "";
	var reg = /^([_a-z0-9-]+(\.[_a-z0-9-]+)*)@([_a-z0-9-]+(\.[_a-z0-9-]+)*)\.([a-z]{2,6})$/i;
	return reg.test(email);
}
est ce qu'il est possible que je mette une condition sur le champ "nom" ?

Que si il n'est pas rempli une alerte apparait et dis que le champ n'est pas complété correctement ?

J'ai réussi assez facilement avec un else pour le champ "email" mais pour le nom je ne vois pas ça ne marche pas des masses à cause de la fonction validation.


Merci à vous
bon avec des messages d'erreur ça donne

function validation(f){

if (!nom_ok(f.nom_txt.value)) { alert("attention pas de nom rempli"); }
if (!email_ok(f.email_txt.value)) { alert("attention email invalide"); }

var ok = nom_ok(f.nom_txt.value)
&& email_ok(f.email_txt.value) ;
return ok ;
}

pas trop compliqué donc.