js interpretation fonction eval "style" - HTML/CSS - Programmation
Marsh Posté le 22-12-2012 à 13:48:05
Eval, il faut l'éviter !
A part pour la conversion du JSON, et encore... !
Tu peux essayer un truc comme ca je pense :
Code :
|
Par contre, ton "x.'crea'=html", ca ne fonctionnera pas !
Tu peux passer dans crea un object, du style { style: 'background-color: red', innerHTML: "blabla.." }
et le traverser avec une boucle du type for ... in
Par exemple
Code :
|
Marsh Posté le 22-12-2012 à 14:03:22
ReplyMarsh Posté le 15-01-2013 à 13:11:47
Fonctionne très bien pour le innerHTML,
Pour le style, s'il est dans la chaine je l'ai mis de la sorte x.style[i]=crea[i] et cela passe
Par contre si je souhaite que le js évalue dynamiquement x.style.qqueschose=argument .. là cela ne passera pas
de plus, puis-je attribuer des évenements du style "x.focus();"
Marsh Posté le 17-01-2013 à 19:37:33
Tu peux mettre ton code qu'on matte ca ?
Marsh Posté le 17-01-2013 à 20:29:24
scuzi
Code :
|
Marsh Posté le 17-01-2013 à 21:03:40
ouhla ca m'a l'air bien bordélique tout ca ! Vouloir relire tout ca dans 6 mois et c'est le bug assuré
M'enfin bref
En fait ce que je voulais c'est ton code complet, à savoir la fonction ainsi que la facon dont elle est appellée.
Marsh Posté le 17-01-2013 à 21:12:19
Je la raccourci un peu pour suivre comme il faut
Code :
|
Marsh Posté le 18-01-2013 à 00:04:53
grosbin a écrit : Je la raccourci un peu pour suivre comme il faut
|
Je sais pas si j'ai tout compris à ce que tu veux faire exactement, mais en gros tu veux passer en parametre une série de style, evenements, etc... à un element qui potentiellement n'existe pas ?
En supposant que c'est ce que tu veux faire :
Code :
|
j'ai pas testé le code, mais en cas de soucis ou si t'as des questions (ou si j'ai rien compris ), hésites pas !
Juste pour info, des librairies comme jQuery font ce genre de manips sans aucun soucis
Marsh Posté le 18-01-2013 à 10:00:41
Superbe, merci pour ta réponse, en réalité je reprends le développement d'un backoffice gestion des rdv, dans ce dernier je dois mettre à jour dynamiquement des valeurs de champs s'il elles sont modifiées par une personne ( par le biais d'ajax, toutes les 5 secondes )
Le défi pour moi est :
1) Les champs peuvent ne pas exister, selon la vue, tri et recherches effectuées
2) Il est possible également que le body ou toute la page ne soit pas finie de charger
( la fonction renvoie sur un timeout pour se réexecuter un fois que ce dernier est bien chargé, pour ne pas louper un champ, par exemple )
-- Là je ne suis pas certain que ce soit la meilleure pratique ..
3) J'adore cette façon de passer les arguments à l'objet, et me permet notamment, de les faire passer par le timeout
4) effectivement je l'ai nommée pour pouvoir également utiliser le jquery avec
Merci pour ton aide précieuse
Marsh Posté le 18-01-2013 à 10:13:58
Pas de soucis. Si t'as d'autres questions hésites pas
Marsh Posté le 18-01-2013 à 10:56:53
Ca passe nickel, juste parfois j'ai mon console.log qui n'affiche rien ou n'affiche seulement au bout de n secondes .. puis s'est remis à fonctionner comme il faut ..
Pour passer une action, ici found.focus je pense à
Code :
|
Marsh Posté le 18-01-2013 à 12:07:53
Je vais profiter de ta gracieuse aide et permission
Cette fonction me fait poireauter les instructions sur $x() tant que le corps du document n'est pas chargé
( pour éviter de louper un tag by id .. )
Code :
|
Je précise bien que c'est l'unique solution que j'ai trouvée à ce jour .. faire un while(bodynotloaded) pause et plante le code sur n secondes, pas génial
Je pensais éventuellement peupler une matrice d'instructions, mais repassant également par eval au final .. bref .. pas gégé mon code
A moins que je fasse wait("FonctionA()" ) et FonctionA(){$x(id,crea,etc..);} .. on comprend bien que la fonction wait casse un peu tout le trip ..
Afin de mieux comprendre l'idée finale que je souhaite en faire ( messy inside )
Code :
|
Ce que je souhaite au final dépasser c'est cette erreur quand je transborde un objet .. qui apparement n'est pas transmis de la bonne façon ..
SyntaxError: missing ] after element list : $x(main,[object Object])
Marsh Posté le 18-01-2013 à 12:43:45
le soucis avec les timeout c'est que ca reste aléatoire. Et si le temps que tu as défini n'est pas suffisant ?
Pourquoi ne pas utiliser tout simplement l'evenement window.onload, ou mieux via jQuery la fonction "ready" (check la doc pour ca http://api.jquery.com/ready/ ).
Sinon saches que les fonction en JS peuvent être invoquée, car ce sont des object comme les autres. Càd que tu définis ta fonction SANS l'executer (càd sans les parentheses à la fin de celle-ci), et que tu la passes en params.
Par exemple, pour un setTimeout :
Code :
|
Si on partira dans l'idée d'un wait par exemple :
Code :
|
Et de grâce, oublie les eval et penses à mettre des var dans les variables que tu définis au sein de tes fonctions, sinon c'est le bourdel assuré dans le browser !
Si tu utilises FireBug, tu peux checker les variables existantes au sein de ton code, et ainsi tracer ce qui est globale (le mal ! ) et ce qui ne l'est pas (car ca ne doit pas l'être)
Marsh Posté le 18-01-2013 à 13:20:05
roaaaarr Fine
exactement j'ai découvert la console js via firebug y'à pas longtemps, cela m'est d'une grande aide
Mais, du coup, pour passer les paramètres de la function maFunc, spécifiquement pour l'objet crea par exemple, je fais comment ?
Dans firebug j'ai compris profilage, mais pas encore trouvé le listing de toutes les globales
de toutes façons si je défini var a; dans une fonction celle dernière ne sera valable que pour une execution
&& this.a définirait une variable statique de la fonction ou globale ?
Marsh Posté le 18-01-2013 à 13:40:44
Je vois ton soucis. Tu peux utiliser ca :
Code :
|
Désormais, lorsque tu invoqueras monCallback (càd tu fais
monCallback () |
tel quel ), c'est maFunc que tu appelleras en réalité, mais avec les params vraiParams1 et vraiParams2 qui y seront déjà attachés
Toutefois, ca reste dynamique
Marsh Posté le 18-01-2013 à 13:43:42
Et pour fireBug, ca se passe dans l'onglet DOM, en décochant "show DOM properties" (ou l'équivalent en FR) pour ne voir que les variables, et pas ce qui est en rapport avec le DOM justement (sauf si t'en as besoin of course).
Marsh Posté le 18-01-2013 à 13:52:43
Je vais finir par devoir te faire un don vu ton aide conséquente
J'ai également compris que les variables statiques ne sont pas dispos en js, donc utiliser des globales bien nommées
En testant
Code :
|
J'ai TypeError: can't convert undefined to object : return ptr.apply (null, a.concat (toArray (arguments)));
( même avec jquery chargé )
Marsh Posté le 18-01-2013 à 17:02:08
En bricolant j'ai trouvé ce code convient bien mieux
Code :
|
puis l'interprétation finale dans mon "wait":
Code :
|
Donc x2 est une globale, il faudrait que je puisse définir son nom dynamiquement afin d'en lancer plusieurs, distinctes, d'affilées ..
Code :
|
Marsh Posté le 18-01-2013 à 17:08:06
oui mon ...toArray.apply (arguments) était foireux, en passant par call ca marche direct, ou alors il aurait fallu faire ...toArray.apply (null, arguments)
Je devrais prendre plus le temps de tester le code que je te ponds
Marsh Posté le 18-01-2013 à 17:31:11
Je te remercie, tu m'as mis sur le droit chemin, je te dois une chandelle
Marsh Posté le 22-12-2012 à 11:39:50
Bonjour, voici le code incomplet d'une de mes fonctions
Je souhaite ici évaluer le paramètre "crea", si ce dernier est une string, afin de pouvoir, par exemple manipuler le style de l'objet, ou faire focus, blur etc..
Cette fonction est appellée derrière une autre ( qui attend que le body soit chargé avant d'essayer d'accéder aux objets ... )
Mon explication est sommaire .. j'espère que vous comprendrez
Merci pour vos lumières
Message édité par grosbin le 22-12-2012 à 11:41:35
---------------
Photos Panoramiques Montagnes Haute Savoie