11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour !

problème simple mais je bloque, j'ai deux formulaire sur une page et je veux faire passer en paramètre l'index de chaque formulaire mais ce code renvoie 2:


forms = document.forms.length;
for (j=0;j<forms;j++) {
		document.forms[j].onsubmit = function () {
		window.alert(i);
	}
}


ça devrait alerter 0 pour form[0] et 1 pour form[1] mais ça renvoie 2 !!!!
Modifié par ChrisG (03 May 2007 - 10:01)

[b]forms[/b] = document.[b]forms[/b].length;
for (j=0;j<forms;j++) {
		document.[b]forms[j][/b].onsubmit = function () {
		window.alert(i);
	}
}

Il n'y aurait pas un conflit de nom par hasard ?
Modifié par CNeo (02 May 2007 - 13:39)
bonjour, j'ai réussi à faire ce que je voulais à l'aide de la fonction eval, mais si un éclairé pouvait m'expliquer pourquoi le premier exemple marche ça serait cool Smiley smile

code qui fonctionne :


forms = document.forms.length;
for (i=0;i<forms;i++) {
	chaine = 'document.forms[' + i +'].onsubmit = function () { window.alert('+ i +') }';
	eval (chaine);
}
Salut,

Il s'agit d'un problème classique : la fonction anonyme réfère non pas à la valeur de j au moment où elle est créée mais à sa valeur finale.

Tu peux écrire quelque chose comme ça :
function createSubmitFn(j) {
  return function() {
    alert(j);
  };
}

var formNb = document.forms.length;
for (var j = 0; j < formNb; ++j) {
  document.forms[j].onsubmit = createSubmitFn(j);
}
merci monsieur !
mais ce qui me parait toujours étonnant c'est que sur ma page avec 2 formulaire le premier script renvoit window.alert(2) alors que i part de zéro et est incrémenté une fois (2 formulaires), ce qui devrait retourner i=1;

Smiley biggol