11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Afin de vérifier si chaque champs de mon formulaire est renseigné, je boucle comme ceci :


var formu = document.getElementById(form);
zonevide = new Array ();
for(i=0;i<formu.length-2;i++) 
{ 	
	var zon = pag + '-elements['+i+']';
		
	if(formu.elements[i].value == '' || !/[a-zA-Z0-9]/.test(formu.elements[i].value))
	{
		zonevide.push(i);
	}
}
return zonevide;


Sur ff, tout va bien. Sur ie, message "Cet objet ne gère pas cette propriété ou cette méthode.

Si j'ai bien vu, c'est le getElementById(form).elements que ie ne digère pas, mais que puis je mettre pour ie ( en lui rajoutant un code spécial)[/i][/i]
Modifié par catcat (16 Apr 2009 - 06:19)
Bonjour, le problème ne vient pas de là, je viens de tester pour en être sûr.

As-tu une URL publique où on pourrait voir le tout ?
en fait, c'est une autre condition que j'avais masquée, indexOf qui me pose problème.

voici le test complet :


function verifForm(pag,formula)
{
	var formu = document.getElementById(formula);
	var nb = formu.elements.length;
	nb = nb-2;
	var listFac = new Array('page67.php-elements[2]','page68.php-elements[2]','page68.php-elements[3]','page76a.php-elements[1]','page76a.php-elements[2]','page122.php-elements[2]','page122.php-elements[3]','page122.php-elements[4]');
	zonevide = new Array (); 
	for(i=0;i<nb;i++) 
	{ 	
		var zon = pag + '-elements['+i+']';
		if((formu.elements[i].value == '' || !/[a-zA-Z0-9]/.test(formu.elements[i].value)) && listFac.indexOf(zon)==-1)
		{
			zonevide.push(i);
		}
	}
	return zonevide;
}


et la fonction IndexOf bloque sur ie
[/i][/i]
indexOf est une méthode standard des objets String, mais n'est pas standard pour les Array. Firefox étend l'ECMAScript pour rajouter cette méthode sur le prototype de Array.

Tu peux mettre ce code avant le tien :


if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this[i] === item) return i;
  return -1;
};


(Code issu de prototype http://www.prototypejs.org/api/array/indexOf)

@+[/i]
bonsoir,

même fonctionmais à un autre endroit et là... ça ne fonctionne pas

Qu'ai-je mal fait ?


function creAnn(listAn, anbase)
{
	var saisie = window.prompt("Saisissez l'année à créer",anbase);
		var annee = Number(saisie);
	//Formule pour remplacer indexof dans ie
		if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this === item) return i;
  return -1;
};
	if(listAn.indexOf(annee) != -1)
	{
		alert("L'année que vous avez saisie existe déjà !");
		creAnn(listAn, anbase);
	}
etc...
}


En fait, il me suffit de mettre mon tableau en tant que string, et ça fonctionne partout !
Modifié par catcat (20 Apr 2009 - 09:54)