Rechargement d'une partie de page ?

Le
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonjour !

Je débute en javascript, d'où ma question peut-être simpliste ; excusez-moi
d'avance.

Voilà : j'utilise des pages .HTA, avec des scripts jscript, comme GUI pour
des applications d'arrière-plan. Mais je fais des pages localement
dynamiques ; c'est à dire que leur contenu se modifie en fonction du
déroulement du logiciel. Par exemple, la saisie d'un élément fait apparaître
un nouveau bouton, permettant de le modifier, ou des champs supplémentaires.

Mon problème vient lorsque je veux modifier le code adressé par le bouton
(typiquement, une fonction). Où que je mette la fonction (dans le <HEAD>,
dans un <DIV>, dans un <SPAN>, dans un fichier .JS externe, etc.) je réussi
bien la modification, je peux bien vérifier que le nouveau contenu est bien
en place, mais c'est quand même toujours l'ancienne version de la fonction
qui est appelée par JScript, alors qu'elle n'est plus dans la page !

Et je ne peux pas faire un rechargement de la page, car je perdrais toutes
les évolutions intermédiaires.

Quelqu'un aurait une idée ? Merci d'avance.

--
Michel Claveau
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
ASM
Le #91112

c'est quand même toujours l'ancienne version de la fonction
qui est appelée par JScript, alors qu'elle n'est plus dans la page !


Tiens ça c'est curieux ...

Rien ne se crée, rien ne se perd, tout se transforme

La fonction existe et ne disparait pas (sans rechargement d'autre chose)

Si elle doit être modifiée suite à modification par elle effectuée
elle n'a qu'à avoir ce qu'il faut pour se modifier elle-même
(ou prévoir une autre fonction pour le faire)

--
******** (enlever/remove [OTER_MOI] du/from reply url) *******
Stéphane MORIAUX : mailto:
Aide aux Pages Perso (images & couleurs, formulaire, CHP, JS)
http://perso.wanadoo.fr/stephane.moriaux/internet/
**************************************************************

Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Le #90896
Bonsoir !

La fonction existe et ne disparaît pas (sans rechargement d'autre chose)




Justement, comment forcer le "rechargement" d'une fonction ?

En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.

Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée,
une fonction se comporte comme si elle avait été "ROMisée".
J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets
intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que
je change de nom d'objet à chaque appel de la fonction, ce qui devient vite
lourd.

Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un
peu mes marques.

Bonne soirée.
--
Michel Claveau



YD
Le #90895

La fonction existe et ne disparaît pas (sans rechargement d'autre chose)




Justement, comment forcer le "rechargement" d'une fonction ?


En la redéfinissant ! Supposons une fonction f() définie, si je veux modifier son code je peux écrire :
f= function(arg1, arg2...){
// le nouveau code
}
Une fonction est une variable javascript, comme une autre de type objet.

Il existe une autre syntaxe, identique dans ses effets :
f = new Function("arg1", "arg2", "[code de la fonction sans les accolades]"); // arg1, arg2, etc. facultatifs

L'avantage de cette deuxième syntaxe est qu'on peut définir le code dans des chaînes et l'affecter au moment voulu. Un peu obscur, alors un exemple à coller dans le body d'une page HTML :

<pre>
<script type="text/javascript">

var code= Array("return x+y;",
"return x*y;",
"return x-y;",
"return y==0?NaN:x/y");
var f; //sera la fonction modifiée

function g(x,y){
f=new Function("x", "y", code[Math.floor(4*Math.random())]);
return f(x,y);
}
//exemple :
for(var i=0; i<10; i++) document.writeln(g(8,7));
</script>
</pre>

En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.


C'est un des cas d'utilisation possible de eval.

Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. [...]


Si tu étais plus concret (exemple simple de code avnt le onclick puis celui
souhaité, et code du onclick surtout), tu aurais davantage de chance d'être aidé.

--
Y.D.




ASM
Le #90893

Bonsoir !

La fonction existe et ne disparaît pas (sans rechargement d'autre chose)




Justement, comment forcer le "rechargement" d'une fonction ?


Ou on ne parle pas de la même chose, ou on ne parle pas de la même chose ?

On appelle une fonction pour qu'elle fasse un truc-bazard
Normalement on a prévu de lui attribuer des arguments
au prochain coup, si on veut qu'elle fasse autre chose
quand on la rappelle, on change les arguments, et elle fait son truc-bazard
sur autre chose, ou autrement si les arguments agissent sur le truc-bazard.
(elle ne saura faire que le truc-bazard qu'on lui aura expliqué)

<html>
<script type="text/javascript"><!--

function dc(text) { document.write(text); }

function al(y) { alert(y); window.status=y; }
function ec(y) { dc(y); al(y); }

function ed(x,id) {
if(id!='' && id!=null && document.getElementById)
document.getElementById(id).innerHTML +=x;
else
al(x);
}

// le "rechargement" se fait par la modif
// de l'argument "text" "y" ou "x" introduit dans la fonction
dc('<h1>Dis bonjour');
dc('<br>a la dame'+'<'+'/h1>');
dc('<p>'); ec('coucou');

// --></script>
<h3>emploi d'1 meme fonction pour des resultats differents</h3>
<p><input type=button value="test1" onclick="ed('avant-dernier ','affichage');">
<div id="affichage"></div>
<p><input type=button value="test2" onclick="ed('der de der');">
</html>

Je peux bien réemployer mes fonctions et même à l'intérieur d'autres fonctions
autant de fois que je veux (c'est pour ça que ça a été inventé)

En fait, j'arrive facilement à mes fins, en passant par des "eval" ; mais
c'est peu satisfaisant pour l'esprit.


Le passage de noms ou ids d'éléments en arguments doivent être
encadrés par des '
(voir l'exemple + haut pour affichage)

Au cours de mes essais, j'ai réussi à induire des changements, à condition
de ne pas avoir utilisé la fonction auparavant. Dès qu'elle est utilisée,
une fonction se comporte comme si elle avait été "ROMisée".


Je ne comprends pas ce que tu me dis
(à vue de nez ça renifle l'Internet Explorer)

d'ailleurs tu parlais de *.hta ...
ça, je ne pratique pas :(

Perso, je ne peux parler que de fonctions JS pour le navigateur.

Peut-être veux-tu trop compliquer du 1er coup ?
(ces histoires d'eval ne m'augurent pas trop)

J'ai voulu essayer, aussi, de tromper le système, en utilisant des objets
intermédiaires (comme des pointeurs sur les fonctions). Mais il faudrait que
je change de nom d'objet à chaque appel de la fonction, ce qui devient vite
lourd.


oui, s'il faut changer à chaque appel, ou se réferer à tt un tas de pointeurs
pas top!

Et puis, comme je l'ai dit, je débute en javascript ; alors je cherche un
peu mes marques.


J'ai un peu l'impression que si tu débutes, tu débutes fort.

Néanmoins sans quelques exemples de code,
pas bp d'aide pourra t'être apportée.

--
******** (enlever/remove [OTER_MOI] du/from reply url) *******
Stéphane MORIAUX : mailto:
Aide aux Pages Perso (images & couleurs, formulaire, CHP, JS)
http://perso.wanadoo.fr/stephane.moriaux/internet/
**************************************************************




Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Le #90892
Bonsoir !

Super-Méga-Génial !

"new Function" correspond exactement à ce que je cherchais. Merci beaucoup.
Là, tu m'as sauvé la vie, en me faisant gagner assez de temps pour aller
boire un coup, et éviter de mourir de déshydratation.

Bonne nuit
--
Michel Claveau
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Le #90891
Bonsoir !

Merci de t'être penché sur mon problème. Grâce au tuyau de Y.D, j'ai pu m'en
sortir.

Sinon, tu as du nez, je passe bien par Internet Explorer. Mais c'est quasi
obligatoire, vu que je dialogue avec mes applis d'arrière-plan par COM.
C'est pour ça, aussi, que les exemples de codes sont difficiles à fournir,
car il faut que les serveurs COM soient installés. De plus, I.E. étant
lui-même serveur COM, je peux l'embarquer dans d'autres applications, afin
de faciliter des migrations.

Pour les .HTA, ils présentent l'avantage de contourner plein de messages
d'alertes qui arrivent avec du HTML, I.E. se croyant sur Internet.

Pour te donner une idée de ce sur quoi je travaille : un utilisateur qui
aura un écran de consultation d'une base de données pourra modifier, à la
volée, le code d'un bouton, sans passer par une quelconque compilation, ni
par un designer quelconque. Il pourra également ajouter un champ à une
table, tout en continuant à travailler dessus. Avant le "new Function",
j'étais obligé de ressortir, puis re-rentrer dans la page.

Dernier détail : si je débute en javascript, j'ai un peu plus d'expérience
avec d'autres langages.

Merci encore.

@-salutations
--
Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B
sites : http://mclaveau.com http://bergoiata.org http://ponx.org
Publicité
Poster une réponse
Anonyme