Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Problème chargement jforms.js

Posted by Martus on 04/22/2008 15:35

Bonjour,

sur une page qui affiche un formulaire géré par un jForm, j'obtiens l'erreur JavaScript

 jForms is not defined
 http://www.federation-fermat.org/index.php?typeFormulaire=creer&module=actualites&action=reunion:afficherFormulaire
 Line 124

produite par la ligne

 jForms.tForm = new jFormsForm('jform1');

qui si je comprends bien débute un morceau de code javascript généré par Jelix et dévolu au contrôle du formulaire, lequel contrôle fonctionne pourtant bien.

Je ne sais pas si cela a un rapport, mais la ligne suivante est également générée dans ma page :

 <script type="text/javascript" src="/jelix/js/jforms.js" ></script>

sans que je sois parvenu à en trouver l'origine, et le fichier n'est pas trouvé, puisque'il se trouve dans jelix-www/js.

Si ça vous parle, je suis preneur.

  [Opened] Re: Problème chargement jforms.js

Reply #1 Posted by yferp on 04/22/2008 15:53

Bonjour

il faut que tu fasse un lien symbolique ou que tu copie les fichiers contenus dans le repertoire jelix-www (/lib/jelix-www/) dans ton application (/tonappli/www/jelix/).

voir la doc : http://jelix.org/articles/tutoriels/first-steps rubrique créer un formulaire

  [Opened] Re: Problème chargement jforms.js

Reply #2 Posted by Martus on 04/22/2008 16:34

Merci pour votre réponse, ça marche mieux en effet. Mais si je comprends bien, on ne peut pas désactiver les contrôles côté client sans avoir cette erreur (ainsi que celle de chargement de jforms.js) ?

Pour finir, j'ai quelque chose de bizarre : le contrôle côté client d'une donnée de formulaire jForm de type 'localetime' échoue si le champ ne comporte pas les secondes ("HH:MM" seulement) — ce qui est normal à la vue du code de jforms.js —, alors qu'il n'échoue pas côté serveur (testé en renommant www/jelix/js/jforms.js pour qu'il ne soit pas chargé).

Y aurait-il une astuce simple pour utiliser avec les jForms un champ 'localetime' sans les secondes ?

  [Opened] Re: Problème chargement jforms.js

Reply #3 Posted by Martus on 04/23/2008 12:11

Pour information, comme dans notre site, toutes les heures sont de la forme "HH:MM" (sauf dans la BD où ":00" est ajouté), j'ai résolu le problème dans notre copie de jforms.js avec un patch "bourrin" :

                    case 'localetime' :
                    case 'time' :
	                    // MB : 22/04/08 : patch bourrin pour ne pas tenir compte des secondes :
                        var t = val.match(/^(\d{2}):(\d{2})$/);
                        if(t == null){ ok=false; break; }
                        var th = parseInt(t[4],10);
                        var tm = parseInt(t[5],10);
                        var ts = 0;//parseInt(t[6],10);
                        var dt = new Date(2007,05,02,th,tn,ts);
                        if(th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds())
                            ok = false;
                        else
                            ok = true;
                        break;

A cette occasion, nous y avons trouvé un petit bug dans les lignes suivantes :

                    case 'localetime' :
                    case 'time' :
	                    // MB : 22/04/08 : patch bourrin pour ne pas tenir compte des secondes :
                        var t = val.match(/^(\d{2}):(\d{2})$/);
                        if(t == null){ ok=false; break; }
                        var th = parseInt(t[4],10);
                        var tm = parseInt(t[5],10);
                        var ts = 0;//parseInt(t[6],10);
               >>       var dt = new Date(2007,05,02,th,tn,ts); <<
                        if(th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds())
                            ok = false;
                        else
                            ok = true;
                        break;

La ligne en question doit être :

                        var dt = new Date(yy,mm,dd,th,tm,ts);

Je précise que nous sommes en Jelix v1.0.2

  [Opened] Re: Problème chargement jforms.js

Reply #4 Posted by Martus on 04/23/2008 12:14

Je précise que le même petit bug est présent dans les cas 'localedatetime', 'datetime'.

  [Opened] Re: Problème chargement jforms.js

Reply #5 Posted by laurentj on 04/23/2008 12:15

on ne peut pas désactiver les contrôles côté client sans avoir cette erreur (ainsi que celle de chargement de jforms.js) ?

jforms.js est indispensable pour que les vérifications soient faites coté client, et non, tu ne peux pas les désactiver, à moins de refaire ton propre builder (cf jelix 1.1a1pre)

Y aurait-il une astuce simple pour utiliser avec les jForms un champ 'localetime' sans les secondes ?

Oui, proposer un patch comme tu viens de le faire :-)

Merci de créer un ticket sur developer.jelix.org et de proposer ainsi tes améliorations.

  [Opened] Re: Problème chargement jforms.js

Reply #6 Posted by Martus on 04/23/2008 15:52

OK, je vais aller voir, mais je signale à y être une autre erreur sur le même morceau de code : les

 t[4], t[5], t[6]

doivent être respectivement remplacés par

 t[1], t[2], t[3].

Je me permets (je peux aussi ouvrir une autre discussion si c'est mieux) de signaler un autre "problème" dans la validation des jForms côté client : en utilisant tinyMCE pour que les <textarea> comprennent une édition enrichie, l'appui sur le bouton de soumission entraîne l'apparition de message 'La saisie de "..." est obligatoire', et il faut soumettre à nouveau pour que ça fonctionne. Apparemment, dans jForms > _getValue, la valeur récupéré est vide lors de la première soumission. Mais c'est peut-être tinyMCE qui est en cause.

  [Opened] Re: Problème chargement jforms.js

Reply #7 Posted by Martus on 04/23/2008 17:46

J'ai tracé les bugs rencontré sur developer.jelix.org (pas pour tinyMCE, car j'avais déjà vu l'arrivée prochaine de htmleditor).

Autre questions qui me chiffonne concernant la validation côté client : j'ai ceci dans mon formulaire :

  	<submit ref="actionFormulaire">
		<label>Veuillez valider</label>
		<item value="annuler" locale="general~admin.boutons.annuler" />
		<item value="valider" locale="general~admin.boutons.valider" />
  	</submit>

Le bouton annuler entraînant ensuite dans le contrôleur l'annulation de l'action, et donc un non appel au contrôle côté serveur ($form->check()). Mais le problème, c'est que si on fait annuler alors que des champs sont incorrects, on a l'apparition de la popup qui empêche la soumission.

Je suppose donc que ce n'est pas une bonne stratégie que nous avons adopté pour l'annulation des formulaires en utilisant les jForms. Et il serait intéressant que le contrôle côté client puisse être désactivé autrement que par l'absence du fichier www/jelix/js/jforms.js , qui entraîne une erreur JS lors de son chargement.

 
Page
  1. Problème chargement jforms.js