par
Cyrano » 23 sept. 2006, 12:32
La solution n'est pas foncièrement mauvaise, le principe est là. Mais il y a des erreurs à corriger.
D'abord, tu utilises dans ton formulaire une syntaxe XHTML : donc l'attribut "
name" est interdit dans la balise <form> et doit être remplacée par l'attribut "
id". Ça implique qu'on va pointer dessus depuis le JavaScript d'une manière différente.
Ta syntaxe JavaScript est définie selon le HTML 4, il faut adapter au XHTML.
L'utilisation de getElementById() est utile lorsqu'on veut pointer quelque part dans une page HTML, mais dans le cas d'un formulaire, on va procéder comme suit : Au lieu de : document.nom-du-formulaire.etc... on devra utiliser document.forms['id-du-formulaire.etc...'] (Attention, forms avec un "s". Même chose pour l'élément du formulaire. On va utiliser l'identifiant du champ.
Voici ce que donne une page complète sur la base de ton code corrigé :
Code : Tout sélectionner
<?xml version="1.0" encoding="iso-8859-1" ?>
<!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" xml:lang="fr" lang="fr">
<!-- Date de création: 23/09/2006 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title></title>
<meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" />
<script type="text/javascript">
/* <![CDATA[ */
function valider(idForm, idInput)
{
var input = document.forms[idForm].elements[idInput];
if (input.value == '')
{
input.focus();
alert('Vous devez sélectionner un fichier');
return false;
}
else
{
return true;
}
}
/* ]]> */
</script>
</head>
<body>
<form action="url" onsubmit="return valider('form', 'fichier');" id="form" method="post" enctype="multipart/form-data">
<p>
<input name="fichier" id="fichier" type="file" />
<input type="submit" value="Ok" />
</p>
</form>
</body>
</html>
Tu noteras que j'ai modifié les paramètres de l'appel de validation : au lieu d'envoyer en second paramètre une chaine vide, je traite ce point directement dans la fonction et à la place, j'envoie l'identifiant du formulaire et le champ à valider. Cette manière de faire te permet d'utiliser ta fonction à partir d'un fichier externe dans n'importe quel formulaire de ton site.
La solution n'est pas foncièrement mauvaise, le principe est là. Mais il y a des erreurs à corriger.
D'abord, tu utilises dans ton formulaire une syntaxe XHTML : donc l'attribut "[i]name[/i]" est interdit dans la balise <form> et doit être remplacée par l'attribut "[i]id[/i]". Ça implique qu'on va pointer dessus depuis le JavaScript d'une manière différente.
Ta syntaxe JavaScript est définie selon le HTML 4, il faut adapter au XHTML.
L'utilisation de getElementById() est utile lorsqu'on veut pointer quelque part dans une page HTML, mais dans le cas d'un formulaire, on va procéder comme suit : Au lieu de : document.nom-du-formulaire.etc... on devra utiliser document.forms['id-du-formulaire.etc...'] (Attention, forms avec un "s". Même chose pour l'élément du formulaire. On va utiliser l'identifiant du champ.
Voici ce que donne une page complète sur la base de ton code corrigé :
[code]<?xml version="1.0" encoding="iso-8859-1" ?>
<!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" xml:lang="fr" lang="fr">
<!-- Date de création: 23/09/2006 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title></title>
<meta http-equiv="Content-language" content="FR-fr" xml:lang="fr" dir="ltr" />
<script type="text/javascript">
/* <![CDATA[ */
function valider(idForm, idInput)
{
var input = document.forms[idForm].elements[idInput];
if (input.value == '')
{
input.focus();
alert('Vous devez sélectionner un fichier');
return false;
}
else
{
return true;
}
}
/* ]]> */
</script>
</head>
<body>
<form action="url" onsubmit="return valider('form', 'fichier');" id="form" method="post" enctype="multipart/form-data">
<p>
<input name="fichier" id="fichier" type="file" />
<input type="submit" value="Ok" />
</p>
</form>
</body>
</html>[/code]
Tu noteras que j'ai modifié les paramètres de l'appel de validation : au lieu d'envoyer en second paramètre une chaine vide, je traite ce point directement dans la fonction et à la place, j'envoie l'identifiant du formulaire et le champ à valider. Cette manière de faire te permet d'utiliser ta fonction à partir d'un fichier externe dans n'importe quel formulaire de ton site.