2010-06-29 7 views
1

Eh bien, le titre dit à peu près tout. J'avaishowto Zend_Dojo_Form_Element_FilteringSelect onchange soumettre

$strata = new Zend_Form_Element_Select('strata'); 
$strata->setLabel('Select a strata: ')->setMultiOptions($this->stratalist)->setAttrib('onChange', 'this.form.submit()'); 

Ensuite, j'ai besoin d'utiliser d'autres éléments de forme de dojo dans d'autres formes. J'ai donc décidé de les faire tous pareils et ai fait:

$strata = new Zend_Dojo_Form_Element_FilteringSelect('strata'); 
$strata->setLabel('Select a strata: ')->setMultiOptions($this->stratalist)->setAttrib('onChange', 'this.form.submit()'); 

Il montre et semble bien, mais la forme n'est pas soumis lorsque je change la FilteringSelect. Si je regarde le code HTML qui est rendu, bien sûr:

<select name="strata" id="strata" onChange="this.form.submit()"> 

Je soupçonne que des éléments Dojo ne peuvent pas ou ne fonctionnent pas comme ça. Alors, comment puis-je soumettre ce formulaire lorsque je change le FilteringSelect?

Merci à tous!

+0

Hum cela ne ressemble pas à un dijit? Ressemble à un élément SELECT normal? – opHASnoNAME

+0

Javascript est incroyable, n'est-ce pas? Eh bien, saviez-vous que vous pouvez avoir dojo changer votre code HTML après qu'il se charge dans le navigateur? C'est à peu près la façon dont Zend l'a mis en place, je pense. As-tu déjà utilisé Zend? –

Répondre

0

Ici, il est:

Lors de la définition de la forme, donnez-lui une carte d'identité:

$this->setName('StrataSelect'); 

ou

$this->setAttrib('id', 'StrataSelect'); 

Ensuite, l'événement onChange utilise getElementById:

$strata = new Zend_Dojo_Form_Element_FilteringSelect('strata'); 
$strata->setLabel('Select a strata: ')->setMultiOptions($this->stratalist)->setAttrib('onChange', "document.dojo.byId('StrataSelect').submit();"); 

ouPourquoi cela fonctionne maintenant et aucun des appels «old school» submit() n'a probablement quelque chose à voir avec dojo qui gère l'événement onchange. Donc soumettre ou this.form ne sont pas des objets, des méthodes, etc etc

Je ne veux pas mettre de javascript ce formulaire dépend de la vue. Je veux que ce formulaire soit "portable". Par conséquent, je ne veux pas utiliser dojo.connect

Il existe probablement de meilleurs moyens de le faire. Donc je vais laisser ceci sans réponse pour le moment.

+0

Je vais aller de l'avant et accepter ma propre réponse et la faible acceptation% n'aide pas à obtenir des réponses ailleurs. –

+0

Ce genre de ne fonctionne pas ... quand je le teste (document.getElement ...) il me dit 'submit() n'est pas une fonction.' –

0

Avez-vous activé parseOnLoad? Si vous construisez la forme en php, vous pouvez le faire:

$form = new Zend_Form_Dojo(); 
$form->addElement(
      'FilteringSelect', 
      'myId', 
      array(
       'label' => 'Prerequisite:', 
       'autocomplete' => true, 
       'jsId' => 'myJsId', 
      ), 
    array(),  //attributes 
     array(   //your select values 
      'id1' => 'name1', 
      'id2' => 'name2', 
      'id3' => 'name3', 
     ) 
); 

vous pourriez avoir besoin de définir quelques attributs sur votre formulaire de $. essayez ceci:

$form->setAttribs(array('jsId'=>'MyFormName')); 

Puis dans votre onClick:

MyFormName.submit() 

Si votre formulaire est validé (en supposant que vous avez), il doit se soumettre.

+0

OK, quelle partie de votre code soumet le formulaire lorsque vous modifiez le select? –

+0

L'accès au formulaire par nom est-il pris en charge dans tous les navigateurs? –

+0

MyFormName est juste un nom, c'est vraiment un objet en Javascript. –