IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Fonction observe() avec eval()


Sujet :

Bibliothèques & Frameworks

  1. #1
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut Fonction observe() avec eval()
    Bonjour,

    J'utilise Prototype pour réaliser un script.
    Je souhaite associer un événement "onkeyup" à une fonction. Ainsi, le code suivant fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myParam.observe("keyup", function(event) {
    				load_list('first_letter='+String.fromCharCode(event.keyCode));
    			});
    J'essaie de charger la fonction depuis une variable et de lui appliquer "eval" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myFunction="function(event){load_list('first_letter='+String.fromCharCode(event.keyCode));}";
    myParam.observe("keyup",eval(myFunction));
    C'est la première fois que j'utilise eval(), donc c'est possible que mon erreur soit de ce côté...
    J'obtiens une erreur "syntax error" située, d'après Firebug, dans la fonction suivante de Prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
    }

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Je pense que ca vient de la façon dont tu déclares ta fonction dans le eval (via la variable) essaye comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var myFunction = "new Function('event', 'load_list(\"first_letter=\"+String.fromCharCode(event.keyCode));');";
    myParam.observe("keyup",eval(myFunction));

  3. #3
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut
    Merci pour ta réponse! J'ai essayé ton code mais c'est toujours la même erreur...
    Je ne sais pas si ça peut changer quelque chose, mais mon code "réel" (je l'avais simplifié dans mon précédent message) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (j=0;j<param_events.length;j++) {
    			myParam.observe(param_events[j][0].substring(2,param_events[j][0].length), eval(param_events[j][1]));
    		}
    où l'array param_events contient, à l'indice [0][0] :et à l'indice [0][1] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "function(event) {load_list('first_letter='+String.fromCharCode(event.keyCode));}"
    Je ne vois pas du tout d'où peut venir le problème!! En appliquant tes suggestions, gwyohm, j'ai donc mis ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (j=0;j<param_events.length;j++) {
    			var myFunction=param_events[j][1];
    			myParam.observe(param_events[j][0].substring(2,param_events[j][0].length), eval(myFunction));
    		}
    mais rien ne change... Est-ce que j'ai mal interprété ta suggestion, où est-ce que c'est d'ailleurs que vient mon problème ?

    Merci.

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    On peut voir un bout du source généré ? En particulier quand tu remplis param_events ?

  5. #5
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut
    Finalement, j'en ai parlé autour de moi et on m'a conseillé de tout faire pour éviter l'utilisation de eval(), avec Prototype ou pas... Donc j'ai abandonné cette possibilité... Bon, bien sûr si je résous le problème dont je parle dans ce topic, je vais peut-être changer d'avis...

    En fait j'ai un fichier XML de la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Module>
    	<ShortDescription>
    		The test module
    	</ShortDescription>
    	<Param type="list" onkeyup="something()">
    		Groupe
    	</Param>
    	<Param>
    		Promo
    	</Param>
    </Module>
    Avec JS je récupère le XML et je traite ses balises, et c'est ainsi que je remplis param_events : pour simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var params = xmlDoc.getElementsByTagName('Param'); // xmlDoc contient mon document XML
    for (i=0;i<params.length;i++)
    	{
    	var currentParam=params[i];
    	for(j=0;j<currentParam.attributes.length;j++) {
    			var currentAttribute=currentParam.attributes[j];
    			var currentAttributeValue=currentAttribute.value;
    			switch(currentAttribute.nodeName) {
    				case 'onload':case 'onkeyup':
    				param_events.push(new Array(currentAttribute.nodeName,currentAttributeValue));
    				break;
    			}
    	}
    }

Discussions similaires

  1. Fonction "CreateElement" avec style sous Firebird
    Par protos69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/11/2004, 17h30
  2. Creation d'une fonction temporaire avec droit datareader
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2004, 14h26
  3. fonctions stockées avec une table en argument
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/10/2004, 23h17
  4. fonction left avec sql server 6.5
    Par shake dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/06/2004, 08h48
  5. Fonction If avec rs.eof problème
    Par M1000 dans le forum ASP
    Réponses: 5
    Dernier message: 24/03/2004, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo