Boucle for + javascript

Bonjour,

j’ai cree un formulaire qui champs nbr de composant

Code:

<form name="form"  action="page2.php" method="post"  onSubmit="return Test()"><input name="comp" type="text" id="comp" onblur="update_march('roul',this.value,'roul')" value="0" size="3" />
<br><br><div id="roul"></div>
        </div></form>

Entre je met le code de mon fonction :

Code:

<script>
nlignes=document.form.comp.value;
function update_march(div,val,nom){
var srt = ""
if(val != 0 ){
var srt = "<table class=\"tab\" width=\"100%\"><tr><td>Référence</td><td>Nom</td></tr>"
}
for(var i=0; i<val;i++){
	srt += "<tr><td><input name=\"ref_"+i+"\" type=\"text\" id=\"ref_"+i+"\" size=\"10\" /></td><td><input name=\"nom_"+i+"\" type=\"text\" id=\"nom_"+i+"\" size=\"10\" /></td><td><tr>"
	}
if(val != 0 ){
	srt += "</table>" }
document.getElementById(div).innerHTML = srt
}
</script>

cet code fonctionne bien , mais je veut faire un test sur le champs ref et nom si vide ou non à l’aide de javascipt
je cree la fonction Test() mais il contin des eurre
Voici mon script:

Code:


<script type="text/javascript">
function Test()
{
 if(document.form.comp.value >0) {
var comp=document.form.comp.value;
for (var i==0; i<comp; i++)
	{
       if(document.form.refcomp_+i+.value=="")
	   {
	   alert("Veuillez entrer  ref svp!");
       document.form.ref_+i+.focus();
	    return false;
}}} }  
</script>

Qui peut aide svp ?
Merci

Oulah…

Règle de base en javascript (et dans d’autres langages) :

document.form.ref_+i+.focus();

===
v1 = document.form.ref_
v2 = i
v1 <== v1 + v2

Moralité? Il gueule.

Ce que tu dois faire, c’est accéder à un formulaire nommé ref_%d, avec %d un entier. Donc, c’est ceci :

document.form[‘ref_’ + i].focus()

Quand tu utilises l’opérateur [] (accesseur d’index dans un tableau) sur un objet, tu récupère la propriété nommée par la chaîne que tu lui passe. ie:

document.form[‘toto’] équivalent à document.form.toto.

C’est juste que dans ton script, tu fais une confusion avec les expressions.

Dans le même genre, tu as la fonction eval().

Salut ,

Merci pour votre reponse
oui je modifier le code comme vous indiquer :

if(document.form.comp.value >0) {
	var comp=document.form.comp.value;
	for (var i==0; i<comp; i++)
	{
      if(document.form['refcomp_'+i].value=="")
	 {
	
	 alert("Veuillez entrer  ref svp!");
    document.form['refcomp_'+i].focus()
	  return false;
	}}}

mais encors ne fonctionne pas
pour le fonction eval().ne pas bien compris cettte fonction svp?
esque vous pouvez me donne le code qui àdapte avecmon script svp ?
Merci encors

Tu as des erreurs, ou mieux une page de tests?

Salut

alors tout d’abord il y avait quelques petites erreurs JavaScript dans ton exemple. Je mets en gras les corrections de tes scripts.

Ensuite, pour faire fonctionner ton exemple, effectivement le plus simple serait d’utiliser la fonction “eval(String)” de JavaScript
Cette fonction permet de dire au JavaScript d’évaluer la chaine de caractère passer en paramètre comme si c’était du code écrit directement par le développeur.

Pour ton exemple cela donnerait :


<script>
function update_march(div,val,nom){
nlignes=document.form.comp.value;
var srt = ""
if(val != 0 ){
var srt = "<table class=\"tab\" width=\"100%\"><tr><td>Référence</td><td>Nom</td></tr>"
}
for(var i=0; i<val;i++){
	srt += "<tr><td><input name=\"ref_"+i+"\" type=\"text\" id=\"ref_"+i+"\" size=\"10\" /></td><td><input name=\"nom_"+i+"\" type=\"text\" id=\"nom_"+i+"\" size=\"10\" /></td><td><tr>"
	}
if(val != 0 ){
	srt += "</table>" }
document.getElementById(div).innerHTML = srt
}

function Test()
{
 if(document.form.comp.value >0) {
var comp=document.form.comp.value;
for (var i=0; i<comp; i++)
	{
 if(eval('document.form.ref_'+i+'.value==""'))  // pour i = 0, cela donne if(document.form.ref_0.value = "")
	 {
	 alert("Veuillez entrer ref svp!");
         eval('document.form.ref_'+i+'.focus();'); // pour i = 0, cela donne document.form.ref_0.focus()
	 return false;
}}} } 
</script>

Et l’exemple final en ligne :
www.megatom.info…
Edité le 07/12/2007 à 14:00