howto Zend_Dojo_Form_Element_FilteringSelect onchange submit

时间:2010-06-29 08:26:32

标签: php zend-framework javascript-events dojo 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时如何提交此表单?

全部谢谢!

2 个答案:

答案 0 :(得分: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->setAttribs( array('jsId'=>'MyFormName') );

然后在你的onClick:

MyFormName.submit()

如果您的表单通过验证(假设您有一些),则应提交。

答案 1 :(得分: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()调用都不会与处理onchange事件的dojo有关。所以submit或this.form不是对象,方法等等。

我不想把这个表单的任何javascript依赖于视图。我希望这个表格“便携”。所以我不想使用dojo.connect

可能有更好的方法来做到这一点。所以我现在暂时没有答案。