Problème Javascript : fonction indéfinie

Résolu/Fermé
TheLamia Messages postés 76 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 18 août 2010 - 3 déc. 2007 à 17:33
TheLamia Messages postés 76 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 18 août 2010 - 11 déc. 2007 à 16:46
Bonjour,

Je dois réaliser un formulaire géré par du Javascript.
Mes fonctions Javascript sont dans un fichier .js inclu dans ma page HTML.

Voici le code de la page 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=utf-8" />
<title>TP Javascript - 29/11/2007</title>
<script language="JavaScript" src="fct.js"></script>
</head>


<body onload="afficheForm()">
</body>
</html>


Voici le fichier .js :

// JavaScript Document
Prod = new Array("Pc", "Imprimante", "Disque Dur");
Prix = new Array(800, 80, 100);

function affLigne(l)
{
	document.getElementById("prix"+l).value = Prix[l];
	//document.forms[0].qte[l].value = 1;
}


function afficheForm()
{
	
	var ch = '';
	
	ch += "<form id=\"form1\" method=\"post\" action=\"ok.html\"><fieldset><legend>Identification</legend><p>Nom : <input type=\"text\" id=\"nom\" /> Pr&eacute;nom : <input type=\"text\" id=\"prenom\" /><br />Adresse : <input id=\"adresse\" type=\"text\" size=\"70\" /><br />Code Postal : <input type=\"text\" id=\"cp\" /> Ville : <input type=\"text\" id=\"ville\" /><br />T&eacute;l&eacute;phone : <input type=\"text\" id=\"tel\" /> E-mail : <input type=\"text\" id=\"mail\" /></p></fieldset><fieldset><legend>S&eacute;lection des produits</legend><p>"
  
  for (var i = 0; i < 3; i++)
  {
	  ch += "<select id=\"produit\" onchange=\"affLigne("+i+")\">";
	  ch += "<option value=\"noP\">Choisir</option>";
	  for (var j = 0; j < 3; j++)
	  {
    	ch += "<option value=\"nom\">"+Prod[j]+"</option>";
	  }  
  ch += "</select> ";
    
  ch += "<input type=\"text\" id=\"prix"+i+"\" /> <input type=\"text\" id=\"qte"+i+"\" /> <input type=\"button\" id=\"plus\" value=\"+\" /> <input type=\"button\" id=\"moins\" value=\"-\" /> <input type=\"button\" id=\"effacer\" value=\"X\" /><br />";
  }
  
  ch += "</p></fieldset><fieldset><p>Mt HT : <input type=\"text\" id=\"ht\" /><br /> Mt TVA (19,6%) : <input type=\"text\" id=\"tva\" /><br />Mt TTC : <input type=\"text\" id=\"ttc\" /></p></fieldset></form>";

	document.write(ch);
}


Mon problème : dès que je clique sur un produit (choix dans le select id=\"produit\" ), j'ai un message d'erreur : Firefox me dit "affLigne() is not defined Ligne 1", IE me dit "Object Expected Lgne 1 Car 1". J'ai beau cherché dans tous les sens, je ne comprends pas pourquoi la fonction affLigne() n'est pas reconnue.

Vous pouvez consulter les pages ici :
http://www.gap.univ-mrs.fr/~gertz/javascript/TpJs/formulaire.html
http://www.gap.univ-mrs.fr/~gertz/javascript/TpJs/fct.js

Auriez-vous une petite idée, une piste, une direction, quoi que ce soit qui pourrait me sortir de là ?

merci d'avance à tous.

3 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
4 déc. 2007 à 15:27
Bonjour,

Le problème vient du fait que tu utilises l'instruction document.write(ch);
en dehors des tags <body> et </body>, ce qui crée en fait un nouveau document HTML qui ne contient que le code depuis le tag <form> jusqu'au tag </form>, il suffit d'afficher le code source de ta page et tu verras ce que je veux dire.

Si tu enlèves cette instruction à la fin de ton script et utilises le code suivant dans le code HTML:

<body>
<script>
  afficheForm();
</script>
</body>


celà devrait fonctionner.

A plus
0
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 384
5 déc. 2007 à 16:20
Bonjour,

En fait , tu peux laisser le code document.write(ch); dans le script, il suffit de remplacer le code

<body onload="afficheForm()">
</body>

par le code

<body>
<script>
afficheform();
</script>
</body>

A plus
0
TheLamia Messages postés 76 Date d'inscription dimanche 11 février 2007 Statut Membre Dernière intervention 18 août 2010 31
11 déc. 2007 à 16:46
merci pour cette solution. j'ai préféré utilisé une autre technique, celle de remplacer tous les write par des innerhtml
0