Variable contenant le nom de la methode JAVASCRIPT

Résolu
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006 - 9 mai 2006 à 18:31
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006 - 10 mai 2006 à 13:56
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

s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006
10 mai 2006 à 13:40
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 !!!
3
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
9 mai 2006 à 21:13
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 :))))
0
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006
9 mai 2006 à 21:24
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...
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
9 mai 2006 à 21:53
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006
9 mai 2006 à 22:01
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.
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
9 mai 2006 à 22:53
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);
0
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006
10 mai 2006 à 09:40
j'ai essayé cette solution et ca me met une erreur du style => Erreur : ']' attendu
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 mai 2006 à 13:35
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 mai 2006 à 13:46
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
0
s1pike Messages postés 19 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 26 août 2006
10 mai 2006 à 13:56
Merci du conseil, j'ai essayé ta méthode et elle marche également !!
0
Rejoignez-nous