Problème Javascript : fonction indéfinie [Résolu/Fermé]

Signaler
Messages postés
76
Date d'inscription
dimanche 11 février 2007
Statut
Membre
Dernière intervention
18 août 2010
-
Messages postés
76
Date d'inscription
dimanche 11 février 2007
Statut
Membre
Dernière intervention
18 août 2010
-
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

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 326
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
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 326
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
Messages postés
76
Date d'inscription
dimanche 11 février 2007
Statut
Membre
Dernière intervention
18 août 2010
30
merci pour cette solution. j'ai préféré utilisé une autre technique, celle de remplacer tous les write par des innerhtml