Variable contenant le nom de la methode JAVASCRIPT [Résolu]

Signaler
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006
-
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006
-
Bonjour à tous, j'ai un petit pb à résoudre. J'ai un classe qui se nomme utilisateur et qui contient des methodes getNom(),getPrenom(). Dans un autre fichier j'ai un formulaire 2 imput. Le premier va avoir comme nom name=nom et le deuxieme name=prenom. Je souhaiterai en fonction du nom du champ input recuperer la methode associer de la classe. Je m'explique, lorsque je tombe sur name=nom, je souhaite recupere le getter associé, c'est à dire getNom(), et recuperer le nom de la classe pour l'affecter a l'element input.

Voici ce que j'ai :
Objet est ma classe qui contient les getter. elt est mon formulaire html
nom_method contient le nom de la methode dont j'ai besoin par exemple getName()
mais quand je fait objet.nom_method (equivaut logiquement a objet.getName()) ca ne marche pas.


function setData(objet)
{




for(
var i = 0; i < elt.length ; i++)
{


var nom_champ = elt.elements[i].name;


nom_method=
"get"+majuscule(nom_champ.charAt(0))+nom_champ.substring(1,nom_champ.length)+
"()";


var truc=objet.nom_method;


elt.elements[i].value=truc;



}




}

Merci de votre aide....

10 réponses

Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006

En fait j'ai reussi avec eval()

il fallait mettre objet en string . Ex:

nom_method=
"get"+majuscule(nom_champ.charAt(0))+nom_champ.substring(1,nom_champ.length)+
"()";



var executionMethode =
"objet."+nom_method;
var toto=eval(executionMethode);

Voila et ca marche nickel !!

Merci pour toutes vos réponses !!!
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Il serait peut être intéressant que tu nous donnes ta définition de l'élément "objet", parce que là, j'avous ne pas tout comprendre. Personellement, je n'ai jamais vu appeler une foncion de cette manière, donc je pense que tu ne t'y prends pas bien. Complète en précisant les noms des fichiers, et j'essaierai de t'aider :))))
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006

Objet est ma classe qui contient les getter ex :

function utilisateur(){

var nom;
var prenom;

this.getNom=function getNom(){
return nom;
}

this.getPrenom=function getPrenom(){
return prenom;
}
............
}

/----------------------------------------------------------------------------/

la classe qui contient setData(objet) se nomme formfield() et s'instancie de cette maniere :

var uti=new Utilisateur();
uti.setNom("toto");
uti.setPrenom("machin");

ffield=new FormField(unformulaire);
fffield.setData(uti);

Le but du code est de passer une classe qui contient des getter et setter à un objet (formfield) qui parcours tous les input de ce formulaire, recupere le nom, et en fonction du nom des inputs crée une variable nom_method qui serra de la forme get+NomInput ex : getNom() ou getPrenom() afin de recuperer le nom et le prenom de l'objet passe en parametre (ici uti) et afficher les valeurs recuperées dans les input ^^ !!!

Voila j'espere avoir été un peu plus clair, si tu as besoin de plus de detail fait moi signe...
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Je note déjà des casses différentes, pour la définition de ta fonction utilisateur(), et son utilisation (var uti=new Utilisateur() )
Ensuite, je pense que tes parenthèses sont en trop dans ta définition de nom_method, puisque tu définis toi même tes fonctions comme this.getNom
(mais là, j'avoue ne pas être sur). Essaie déjà de voir ça, et éventuellement, fais des tests pour savoir où ça plante exactement (personellement, j'use et j'abuse des alerts, puisque javascript lit et exécute le programme dans son sens normal de lecture, tu peux savoir immédiatement à quelle ligne ça bugue)
voilà
@+. moi
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006

ouhais je suis d'accord pour la casse mais j'ai tapé a l'arrache c'est pour ca , mais mon code est correcte. Le bug vient juste du fait que lorsque je veux utiliser ma variable qui contient le nom de ma methode, je ne peux pas faire monObjet.nom_methode

EX :
Logquement je devrais faire uti.getNom();
or ici uti est passé en parametre et le nom de la methode est stocké dans nom_methode

nom_methode="getName()"; // c'est un raccourci de mon code mais le resultat est le meme
objet.nom_methode me retourne undefined
alors que si je fait objet.getName() me retourne le nom de mon objet uti

Le problème vient juste de la car je ne sais pas comment évaluer ma methode pour faire comme si c'etait getName()
J'ai essayé eval() ca ne marche pas, je ne pense peut etre pas a tout donc c'est pour ca que j'en parle sur le forum.

Ou alors si ya une methode d'introspection de ma classe et me retourne une liste avec les méthodes de ma classe javascript (Utilisateur) je suis preneur.

Le but est vraiment de récupérer le résultat de chaque getter ma classe Utilisateur, mais pour ca il faut bien les récupérer.
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Essaie de modifier ta définition de var truc comme ici:

var nom_champ = elt.elements[i].name;

nom_method=
"get"+majuscule(nom_champ.charAt(0))+nom_champ.substring(1,nom_champ.length)+
"()";

var truc = eval(objet+"."+nom_method);
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006

j'ai essayé cette solution et ca me met une erreur du style => Erreur : ']' attendu
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour il faut faire :


nom_method="get"+majuscule(nom_champ.charAt(0))+nom_champ.substring(1,nom_champ.length)
;


var truc=objet[nom_method]();

// on rajoute la méthode toFirstUpperCase à l'objet String
string.prototype.toFirstUpperCase = function(){
var s;
s += this.charAt(0).toUpperCase();
s += this.substring(1, this.length).toLowerCase();
return s;
}

tu peux meme faire : var truc = tonObj['get' + nom_champ.toString().toFirstUpperCase()];

regarde ici : http://blogs.developpeur.org/cyril/archive/category/1037.aspx j'ai écrit plusieurs articles sur le sujet ;-)


<HR>
Cyril - MVS - MCP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
eval est une méthode ca implique donc qu'il va y avoir du code derriere, la facon que je t'ai montré ne fais pas appel à d'autres méthodes elle sera donc beaucoup plus rapide ...

évite eval sauf quand c'est vraiment nécessaire, ca conduit souvent à des trucs bien compliqués


<HR>
Cyril - MVS - MCP
Messages postés
19
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
26 août 2006

Merci du conseil, j'ai essayé ta méthode et elle marche également !!