Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Fonctions - String

Sujet résolu
    11 mars 2009 à 16:21:39

    Bonjour !

    J'ai un problème en Javascript, je m'explique :

    j'ai une fonction contenue dans une chaine de caractères, et j'aimerai exécuter cette fonction ... mais je n'y arrive pas.

    Voici du concret :

    test = "function toto(){alert('plop');}" ;
    


    Comment faire pour exécuter toto ?

    Merci les zér0s !
    • Partager sur Facebook
    • Partager sur Twitter
      11 mars 2009 à 16:28:44

      Utilises la fonction eval()
      • Partager sur Facebook
      • Partager sur Twitter
        11 mars 2009 à 16:36:20

        je veux bien, mais ... comment ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 mars 2009 à 16:59:51

          <html>
          	<head>
          	
          		<title>test</title>
          		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          		<script type="text/javascript">
          	
          				var fonctionEval = "function toto(){alert('plop');}"
          
          				eval(fonctionEval);
          
          				function init()
          				{
          					toto();
          				}
          	
          
          		</script>
          
          	</head>
          	<body onload="init();">
          		
          	</body>
          </html>
          
          • Partager sur Facebook
          • Partager sur Twitter
            12 mars 2009 à 9:43:40

            Je te remercie loacast !

            Seulement, il me reste un problème : dans ma fonction "toto" (pour reprendre l'exemple du dessus), je définis un évenement, et celui-ci ne s'exécute pas après appel de la fonction.

            Savez vous comment faire ?

            Merci beaucoup !
            • Partager sur Facebook
            • Partager sur Twitter
              12 mars 2009 à 10:46:23

              Tu peux montrer ton codes ?
              • Partager sur Facebook
              • Partager sur Twitter
                12 mars 2009 à 11:51:51

                alors ca va etre un peu compliqué ... je m'explique :
                1) je créé une chaine en Java qui va contenir tout mon code Javascript :

                String ChaineJSGrid="chaineJS = function () {";
                
                ...
                
                ChaineJSGrid += "mySubGrid" + cpt + " = new dhtmlXGridObject(); " +
                				//"mySubGrid" + cpt + ".selMultiRows = true;" +
                				"mySubGrid" + cpt + ".imgURL = '../javascript/DHTMLX/grid/imgs/';" +
                				//"mySubGrid" + cpt + ".enableContextMenu(menu);" +
                				//"mySubGrid" + cpt + ".setSkin('light');" +
                				"mySubGrid" + cpt + ".init();" +
                				"mySubGrid" + cpt + ".loadXML('../javascript/Offres" + cpt +".xml');" + 
                				"" +
                				"mySubGrid" + cpt + ".attachEvent('onRowSelect',function(){alert('bonjour');});";
                
                ...
                
                ChaineJSGrid += "}";
                


                Ensuite, je récupère ma chaine dans une JSP au travers d'un bean. Pour ceux qui ne comprenne pas ou qui ne l'ont jamais fait, en fait, une JSP c'est un fichier HTML un peu modifié, mais qui garde les meme fonction, et un bean, c'est une balise qui va se transformer (en chaine dans mon exemple) :

                <script type="text/javascript">
                var test = '<bean:write filter="false" name="adminDHTMLXForm" property="chaineJSGrid" />';
                			var exp=new RegExp("(&lt;)","g");
                		test=(test.replace(exp,"<"));
                		var exp=new RegExp("(&gt;)","g");
                		test=(test.replace(exp,">"));
                		var exp=new RegExp("(&quot;)","g");
                		test=(test.replace(exp,"\""));
                		var exp=new RegExp("(&#39;)","g");
                		test=(test.replace(exp,"'"));
                		//alert(test);
                		window.eval(test);
                		//chaineJS();
                		function Creation(){
                			chaineJS();
                			mySubGrid1.attachEvent('onRowSelect',doOnRowSelected);
                		}
                </script>
                


                Pour des raisons d'encodage de caractères, je suis obligé de passer par une chaine javascript que je traite.

                Certains d'entre vous auront aussi remarqué que j'utilise une API javascript : DHTMLX (qui va me générer mon objet Grid).

                et en fait, l'évennement fait sur mySubGrid1 ne s'exécute pas. Voici a quoi ressemble cet évennement :

                function doOnRowSelected(rowId, celId){
                	NumLigne = rowId;
                	alert("Ligne : " + rowId + "Cellule : " + celId);
                	//alert(document.getElementById("c_" + rowId + "_3").innerHTML);
                }
                


                alors qu'il fonctionne ailleurs ...

                Quelqu'un a-t-il des questions/suggestions/remarques/idées ?

                Ca fait 24H que je suis sur le meme problème, et j'ai l'impression d'avoir tout essayé.

                En tous cas, merci Loacast pour ton aide !


                EDIT :

                J'ai trouvé la solution : il faut en fait, abandonner toute la partie Javascript. Je m'explique ! Ma subgris est chargée avec un fichier XML. C'est dans ce fichier qu'il faut définir les évennements (et oui, en XML !)

                Il fallait le trouver, mais c'est spécifique a DHTMLX. Si vous avez des idées, je les testeraient quand meme, histoire d'agrandir mes connaissances en Javascript !

                Merci a tous ceux qui se seront casser des neurones a résoudre mon problème !!!
                • Partager sur Facebook
                • Partager sur Twitter

                Problème Fonctions - String

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown