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() 呼び出しのいずれも、おそらく onchange イベントを処理する dojo と関係があるとは限りません。したがって、submit または this.form は、オブジェクト、メソッドなどではありません。

このフォームが依存する JavaScript をビューに入れたくありません。このフォームを「ポータブル」にしたい。したがって、私は dojo.connect を使用したくありません

おそらくこれを行うためのより良い方法があります。ですので、今回は未回答のままにしておきます。

于 2010-07-06T07:52:21.407 に答える