1

好吧,标题几乎说明了一切。我有:

$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 时,如何让这个表单提交呢?

4

2 回答 2

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 上设置一些属性。试试这个:

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

然后在您的 onClick 中:

MyFormName.submit()

如果你的表单通过了验证(假设你有一些),它应该提交。

于 2010-06-30T18:35:37.497 回答
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 事件无关。所以 submit 或 this.form 不是对象、方法等等等。

我不想将此表单依赖的任何 javascript 放入视图中。我希望这种形式是“便携的”。所以因此我不想使用 dojo.connect

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

于 2010-07-06T07:52:21.407 回答