2010-06-29 52 views
1

那么标题几乎说明了一切。我有howto Zend_Dojo_Form_Element_Filtering选择onchange提交

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

然后,我需要在其他形式中使用一些花哨的dojo表单元素。所以我决定让他们看起来都一样,做了这一点:

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

它显示了,看起来很好,但是当我改变FilteringSelect来未提交表单。如果我看看呈现的HTML,果然:

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

我怀疑Dojo元素不能或不能像这样工作。那么当我更改FilteringSelect时,如何提交此表单?

谢谢大家!

+0

哼,这看起来不像dijit?看起来像一个普通的SELECT元素? – opHASnoNAME 2010-06-30 08:20:00

+0

Javascript太棒了,不是吗?那么,你知道你可以让dojo在加载到浏览器后修改你的html吗?这很像Zend设定我的想法。你之前使用过Zend吗? – 2010-07-05 10:21:07

回答

0

这:

当定义的形式,给它一个id:

$this->setName('StrataSelect'); 

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

然后onChange事件使用的getElementById:

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

$strata->setLabel('Select a strata: ')->setMultiOptions($this->stratalist)->setAttrib('onChange', "document.getElementById('StrataSelect').submit();"); 

为什么现在可以工作,并且没有任何“老派”submit()调用可能与dojo处理onchange事件有关。所以提交或this.form不是对象,方法等等等等等

我不想把任何JavaScript这种形式取决于视图。我希望这个表单是“便携”的。因此,我不想使用dojo.connect

有可能有更好的方法来做到这一点。所以我现在不会回答这个问题。

+0

我打算继续并接受我自己的答案,并且接受率很低,并不能帮助其他人获得答案。 – 2010-08-18 03:28:17

+0

这种行为不起作用......当我测试它时(document.getElement ...),它告诉我'submit()不是函数。“ – 2012-07-09 17:35:56

0

您是否启用了parseOnLoad?如果您在php中构建表单,您可以这样做:

$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', 
     ) 
); 

您可能需要在$ form上设置一些属性。在你的onClick

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

然后: 试试这个

MyFormName.submit() 

如果您的形式通过了验证(假设你有一些),应该提交。

+0

好的,那么,当您更改选择时,代码的哪一部分会提交表单? – 2010-07-05 10:19:23

+0

正在通过所有浏览器支持的名称访问表单吗? – 2010-07-08 11:03:20

+0

MyFormName只是一个名称,它真的是Javascript中的一个对象。 – 2010-08-16 21:14:02