js et fonction anonyme

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Invité

js et fonction anonyme

Message par Invité »

bonjour

pour gerer des evenements de mouseover, je passe par des fonctions anonymes:

Code : Tout sélectionner

function getStandardEvent(e) 
{
	if (e == null && window.event) 
	{
		e = window.event ;
	}
	
	if (e.target == null && e.srcElement) 
	{
		e.target = e.srcElement ;
	}
	
	if (! e.preventDefault )
	{
		e.preventDefault = function () { this.returnValue = false ; } ;
	}
	return e ;
}

function addEvent(obj, e, fn)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(e, fn, false);
		return true;
	} 
	else if (obj.attachEvent)
	{
		var r = obj.attachEvent("on"+e, fn);
		return r;
	} 
	else 
	{
		return false;
	}
}
apres, je voudrais lié un evenement a plusieurs blocks dans une boucle

Code : Tout sélectionner

for(i=0; i<=7; i++)
{
	j = i;
        if(i == 0) { j = "NONE"; }
	addEvent(document.getElementById('ancre_filtre_body_'+ j), 'mouseover', function(e){ display_zoom(e,  j);  });
}
je voulais que pour l'objet "ancre_filtre_body_1", display_zoom s'affiche avec le parametre e (objet evenement) et comme deuxieme parametre, la valeur 1 (la valeur de j dans ma boucle)

dans la forme actuelle, ca merde totale car j a ce moment la est egale a 7 (il prend la valeur globale de j)
je pourrais faire comment? via un eval?
genre
eval('function(e) { display_zoom(e, '+ j +'); }');
y'aurais pas une methode plus "propre" (j'ai jamais ete fana des evals)
maxxfly
Salamandre
Messages : 30
Inscription : 17 févr. 2004, 14:32

Message par maxxfly »

desole pour le post precedent
je me suis connecte en "guest" sans m'en rendre compte
et puis en fin de compte, apres avoir ouvert mon gros bouquin de chez o'reilly "javascript la reference", j'ai trouve une solution:

Code : Tout sélectionner

for(i=0; i<=7; i++)
{
	j = i;
       if(i == 0) { j = "NONE"; }

	var f =new Function("e", "display_zoom(e, "+ j +");");
	addEvent(document.getElementById('ancre_filtre_body_'+ j), 'mouseover', f);

}
sorry
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité