Как Zend_Dojo_Form_Element_FilteringВыбрать onchange submit - PullRequest
1 голос
/ 29 июня 2010

Ну, название в значительной степени говорит само за себя.У меня было

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

Тогда мне нужно использовать некоторые необычные элементы формы додзё в других формах.Поэтому я решил сделать так, чтобы все они выглядели одинаково и сделал следующее:

$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 голосов
/ 06 июля 2010

Вот оно:

При определении формы укажите ее идентификатор:

$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

Возможно, есть лучшие способы сделать это. Поэтому я пока оставлю это без ответа.

0 голосов
/ 30 июня 2010

У вас включен 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()

Если ваша форма прошла проверку (если она у вас есть), она должна быть отправлена.

...