Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-02-2009 14:51:51

Miridan
Nouveau membre
Date d'inscription: 27-02-2009
Messages: 2

[Dojo] Soumission de formulaire avec onchange

Bonjour,

Je suis tout nouveau avec ZF et Dojo et j'ai un petit soucis sur lequel je bloque depuis 2 jours sans pouvoir trouver de solutions nul part...

J'ai un "formulaire" (généré avec Zend_Form) qui comporte uniquement un champs "DateTextBox"... Jusque là pas de problème...
Je souhaite poster le formulaire (et recharger la page avec la valeur postée) dès que la date est modifiée... En soit, rien de bien compliquer...

Je n'utilise donc pas un bouton submit mais une action javascript "document.document.getElementById("monFormulaire").submit();" sur l'attribut onchange de mon champs date.

Seulement voilà, mon formulaire s'affiche correctement, j'ai bien mon sélecteur de date, le formulaire "semble" bien être poster et ma page se recharge bien suite à un changement de date...
Mais, la valeur postée n'est pas la valeur modifier (après sélection d'une nouvelle date) mais la valeur initiale de mon champ.

Lorsque, dans mon contrôleur, j'essaie de récupérer la valeur, le formulaire est bien envoyée par méthode POST, la valeur de mon champ est bien renvoyée, mais est fausse !

Ce problème ne survient que en "soumission automatique" car si je supprime le "onchange" et met à la place un bouton de type submit, là mon formulaire est bien posté ET je récupère la bonne valeur. Seulement ayant des formulaire par la suite assez charger, cette solution ne me convient pas.

Auriez-vous une solutions pour correctement posté mon formulaire au changement de valeur de ma date ?

Voici mon code (pas forcement très... nikel... étant tout nouveau sur ZF et ayant encore un peu de mal sur certains points) :
Mon constructeur de mon formulaire :

Code:

class FormTempsDate extends Zend_Form
{
    public function __construct($option = null)
    {
        parent::__construct($option);
        $this->setName('formTemps');
        
        $dt_temps = new Zend_Dojo_Form_Element_DateTextBox('dt_temps');
        $dt_temps->setLabel('Feuille de temps du ')
        ->setAttrib('onchange', 'document.getElementById("formTemps").submit();');
        
        $this->addElements(array($dt_temps));
    }
}

Mon contrôleur :

Code:

public function indexAction() {
        $this->view->title = "TEMPS";
        
        $form = new FormTempsDate();
        
        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $date = $form->getValue('dt_temps');
                $form->dt_temps->setValue($date);
                $this->view->form_dt_temps = $form;
            }
        }else{
            $form->dt_temps->setValue(date('Y-m-d'));
            $this->view->form_dt_temps = $form;
        }
    }

Je vous épargne la vue et le bootstrap qui son tout a fait standard je croit wink
- J'utilise cependant l'aide de vue "Doctype" pour faire des pages XHTML 1.0 TRANSITIONAL... problème sans rapport puisque tester sans...
- Mon formulaire est généré avec Zend_Form et non Zend_Dojo_Form... peut être pas propre, mais ça m'arrange comme ça pour le moment, et le problème ne vient pas de là non plus...
- J'utilise ZF V1.7.3 avec la version de Dojo incluse (connait pas la version mais sans doute une des dernière a cette date).

Je vous remercie d'avance de votre aide et du temps que vous y passerez...

Hors ligne

 

#2 02-03-2009 14:28:12

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [Dojo] Soumission de formulaire avec onchange

Les valeurs sont dans le formulaire.
Voici comment je traite un formulaire, conformément aux exemples, je crois :

Code:

if ($this->getRequest()->isPost())
        {
            if (!$formulaire>isValid($_POST))
            {
                // Des erreurs de premier niveau ont été detectées
                $values = $formulaire->getValues(); // si on souhaite traiter les valeurs erronées
            }
            else 
            {
                        // Validation fonctionnelle et traitement
                        $values = $formulaire->getValues();
                        traitement = $values['nom_de_la_zone'];
                }
         }

Hors ligne

 

#3 03-03-2009 11:48:55

Miridan
Nouveau membre
Date d'inscription: 27-02-2009
Messages: 2

Re: [Dojo] Soumission de formulaire avec onchange

OK, mais la seule chose qui change ici, c'est que tu récupère toutes les valeurs d'un coup et moi au cas par cas (et que tu traite le cas ou le formulaire n'est pas valide pas moi)...

Mais je ne pense pas que ça change quoi que ce soit...
Je récupère bien une valeur de mon formulaire !!! Le problème est juste que la valeur que je récupère n'est pas la bonne hmm
En fait c'est comme si il poster le formulaire avant même que la valeur est été modifier dans le champs date...

Je ne croit pas que le problème vienne du contrôleur, mais bien de ma façon de posté mon formulaire.

Je sait que pour certaine bibliothèque javascript (éditeur WYSIWYG par exemple), il ne faut pas posté directement le formulaire mais appelé au préalable une fonction javascript de validation... Peut être est-ce le cas aussi pour Dojo ? Malheureusement je n'ai rien trouver en ce sens dans les docs et sur les différents sites pour Zend et Dojo...

Ma question reste donc au même stade... Je continu à chercher et vais tout de même tester ta solution...

Hors ligne

 

#4 04-03-2009 22:14:33

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [Dojo] Soumission de formulaire avec onchange

La zone Dojo de type date est validée au moment de la frappe sans que le formulaire ne soit transmis.

Avec les zones de type dojo il y a 3 niveaux de validation :

au moment de la frappe, en direct par Javascript
à l'envoi du formulaire où les contrôles définis dans la classe Form Dojo sont effectués
après les controles précédents, des contrôles fonctionnels éventuellement définis dans ton controller.

Hors ligne

 

#5 14-04-2009 17:44:51

gauthier
Membre
Date d'inscription: 30-09-2008
Messages: 116
Site web

Re: [Dojo] Soumission de formulaire avec onchange

Salut,

j'avoue que ça me commence à légèrement m'énerver ce problème : la cause en est très simple, mais je rame à trouver la solution smile

Le DateTextBox utilise un champs caché pour distinguer la valeur affichée de la date sélectionnée, et se sert de cette valeur pour calculer la chaîne à retourner lors du submit - avoir recours à onchange en direct shunte la mise à jour du champs caché, qui est déclenchée par des dojoEvents...

pour t'en convaincre, remplace le "onchange" par un "onblur", change la date et clique à côté du champ smile

je ne suis pas expert (ni fan) de Dojo, donc il va falloir gratter un peu pour trouver comment déclencher le submit par une méthode interne à Dojo plutôt que de cette manière, de sorte qu'il gère un peu mieux la situation smile


Consultant Zend Technologies // Blog perso : Logiciel libre et développement web -- http://freeblogware.org

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages