开发者

How to Zend_Dojo_Form_Element_FilteringSelect onchange submit

开发者 https://www.devze.com 2023-01-05 05:54 出处:网络
Well the title pretty much says it all. I had: $strata = new Zend_Form_Element_Select(\'strata\'); $strata->setLabel(\'Select a strata: \')->setMultiOptions($this->stratalist)->setAttrib(

Well the title pretty much says it all. I had:

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

Then I need to use some fancy dojo form elements in other forms. So I decided to make them all look the same and did this:

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

It shows up and looks fine, but the form is not submitted when I change the Filterin开发者_如何学GogSelect. If I look at the HTML that is rendered, sure enough:

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

I suspect that Dojo elements cannot or do not work like this. So how do I make this form submit when I change the FilteringSelect?


Here it is:

When defining the form, give it an id:

$this->setName('StrataSelect');

or

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

Then the onChange event uses getElementById:

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

or

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

Why this now works and none of the "old school" submit() calls probably has something to do with dojo handling the onchange event. So submit or this.form are not objects, methods, etc etc etc.

I don't want to put any javascript this form depends on into the view. I want this form to be "portable". So therefore I don't want to use dojo.connect

There are probably better ways to do this. So I'll leave this unanswered for now.


Do you have parseOnLoad enabled? If you're building the form in php you can do this:

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

you might need to set a few attributes on your $form. try this:

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

Then in your onClick:

MyFormName.submit()

If your form passes validation (presuming you have some), it should submit.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号