2010-06-29 65 views
1

那麼標題幾乎說明了一切。我有howto Zend_Dojo_Form_Element_Filtering選擇onchange提交

$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時,如何提交此表單?

謝謝大家!

+0

哼,這看起來不像dijit?看起來像一個普通的SELECT元素? – opHASnoNAME 2010-06-30 08:20:00

+0

Javascript太棒了,不是嗎?那麼,你知道你可以讓dojo在加載到瀏覽器後修改你的html嗎?這很像Zend設定我的想法。你之前使用過Zend嗎? – 2010-07-05 10:21:07

回答

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事件有關。所以提交或this.form不是對象,方法等等等等等

我不想把任何JavaScript這種形式取決於視圖。我希望這個表單是「便攜」的。因此,我不想使用dojo.connect

有可能有更好的方法來做到這一點。所以我現在不會回答這個問題。

+0

我打算繼續並接受我自己的答案,並且接受率很低,並不能幫助其他人獲得答案。 – 2010-08-18 03:28:17

+0

這種行爲不起作用......當我測試它時(document.getElement ...),它告訴我'submit()不是函數。「 – 2012-07-09 17:35:56

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上設置一些屬性。在你的onClick

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

然後: 試試這個

MyFormName.submit() 

如果您的形式通過了驗證(假設你有一些),應該提交。

+0

好的,那麼,當您更改選擇時,代碼的哪一部分會提交表單? – 2010-07-05 10:19:23

+0

正在通過所有瀏覽器支持的名稱訪問表單嗎? – 2010-07-08 11:03:20

+0

MyFormName只是一個名稱,它真的是Javascript中的一個對象。 – 2010-08-16 21:14:02