代码之家  ›  专栏  ›  技术社区  ›  d-_-b

如何Zend\u Dojo\u Form\u Element\u FilteringSelect onchange submit

  •  1
  • d-_-b  · 技术社区  · 16 年前

    好吧,标题差不多说明了一切。我有:

    $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 回复  |  直到 6 年前
        1
  •  0
  •   d-_-b    16 年前

    在这里:

    定义窗体时,请为其指定一个id:

    $this->setName('StrataSelect');
    

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

    $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

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

        2
  •  0
  •   Will Olbrys    16 年前

    是否已启用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()
    

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