Réaffecter le JS au back

iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009 - 21 janv. 2008 à 15:41
iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009 - 21 janv. 2008 à 16:44
Bonjour à vous, professionnels :D

L'absence de mots-clés vraiment liés à mon problème fait que mes recherches sont vaines.

Sur un de mes sites, je construis le formulaire en fonction d'une liste venant d'une DB. Le code lit la DB et crée les input; cependant, certains input sont liés, comme par exemple :
- un input se "disable" si on choisit une certaine valeur dans un autre input
- un input n'est affiché que si on choisit "oui" dans le radio button du haut

Le javascript lié à ces événements est également dans la DB, et cela fonctionne.

Gros problème : si l'utilisateur valide le formulaire, puis fait un "back", il revient sur la page, tous les inputs ont gardé leur valeur, mais aucun controle js n'est fait. Et donc dans mes exemples :
- l'input n'est pas "disabled" alors que l'autre input contient la bonne valeur
- le radio sélectionné est "oui", mais l'input relié n'est pas visible.

Etant donné que les fonctions JS à effectuer viennent de la DB, je ne peux pas mettre un "onload" dans le body, puisque je n'ai pas encore les champs.

Comment relancer, à la fin de l'affichage de la page, ces fonctions d'événements ???

Merci beaucoup !

9 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 janv. 2008 à 15:48
>>Etant donné que les fonctions JS à effectuer viennent de la DB,
    tu as stocké des fonctions javascript dans une base de données ?
   
>>je ne
peux pas mettre un "onload" dans le body, puisque je n'ai pas encore
les champs.
    ben... onload, c'est quand la page est affichée, entièrement, les champs existent donc.

ou je n'ai rien compris ?




<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009
21 janv. 2008 à 15:55
Les fonctions JS sont dans la DB, car la gestion des questions du formulaire est dynamique. Donc si dans le module d'administration la personne fait "n'afficher cet input que si l'input A est supérieur à 0", par exemple, cela se traduit en DB par le champ "TestJS" qui vaut "hidshow('input1','input2',890)".

Ma fonction hidshow est elle, passée dans le head car elle sait comprendre ce passage de paramètres. Par contre, je ne sais pas à l'avance combien de fois et quels champs y font appel.

le onload est bien une fois que la page est chargée. Mais lorsque dans mon code ASP s'écrit le "", je n'ai pas encore lu la DB, donc je ne connais pas encore les occurences de hidshow à appeler.

Merci pour ta réponse !

PS : par contre j'ai des milliers d'erreur sur ce site-ci : des '(' manquants et des 'sys' indéfinis
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 janv. 2008 à 16:02
>>Mais lorsque dans mon code ASP s'écrit le "", je n'ai pas encore lu la DB,


    ah... ton souci est donc coté asp.

par contre tu peux très bien tester "d'où tu viens" coté javascript
    soit document.referer, soit utiliser un cookie, soit...
    et agir en conséquence

<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 janv. 2008 à 16:12
ou ce que tu veux faire avec onload, fait le
    juste avant le ,   non ?
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0

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

Posez votre question
iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009
21 janv. 2008 à 16:13
En fait, j'ai trouvé, tu m'as un peu mis sur la voie.

Je lis ma DB, et chaque fois que je trouve un appel de fonction JS à affecter, je
- l'affecte à mon input (comme avant)
- l'ajoute à une liste d'appels de fonctions (variable string ASP, donc, qui ressemble donc à  "<script langage=javascript>function RetestJS(){" + mes appels de fonctions avec ; au bout + "}".

Ensuite j'écris cette chaine dans l'html.

Et dans le body je fais un onload="RetestJS();', qui va donc chercher la fonction JS se trouvant après mon code html.

Pas sûr que ça soit clean, mais ça marche :D

Merci !
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 janv. 2008 à 16:15
pas tout suivi, mais si ça baigne : nickel.
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009
21 janv. 2008 à 16:22
Ben en gros, ma page ressemble à ça :

<form>

</form>
<script langage=javascript>
function RetestJS(){
   hidshow('1','2',890);
}
</script>

En sachant que l'appel à la fonction hidshow vient donc de ma db, et qu'on peut voir X input comme ça.
Ca te semble pas trop bordélique ?
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 janv. 2008 à 16:37
    ne sachant pas ce que fait hidshow...   ?
    si hidshow est appelée pour tous les champs,
       une boucle sur ces champs en fin de page, peut-être?...
<hr />                Cordialement            Bul         «mon Site»     «M'écrire»
0
iguypouf Messages postés 45 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 26 août 2009
21 janv. 2008 à 16:44
Arff non, justement, le hidshow passe en paramètres un numéro que la fonction hidshow sait comprendre. Mais cet appel est géré dynamiquement quand on est admin : on peut l'affecter à certains champs, d'autres non.


Je pense que je vais laisser comme ça.


Merci pour ton aide en tous les cas !
0
Rejoignez-nous