2009-11-25 37 views
4

我使用的是選擇元素,在形式上如何禁用symfony中的表單元素?

'country' =>new sfWidgetFormChoice(array('choices' => CountryPeer::getAllCountry())), 

'city' =>new sfWidgetFormChoice(array('choices' => CityPeer::getAllCity())), 

我想,城市元素被禁用,在第一次加載頁面時。並在選擇國家城市元素將被啓用(它將通過AJAX調用加載)

回答

10

您可以禁用這樣

$這個 - > widgetSchema [ '國家'] - >的setAttribute( '禁用', '禁用');

+0

是啊!這種方式可以在表單加載時第一次禁用select選項。感謝Metoikos! – 2009-11-26 05:13:19

+1

正如邁克已經提到的。當您想要稍後使用POST/PUT字段時,這不是正確的方法。那麼它應該是隻讀而不是禁用 – 2016-03-02 09:42:06

0

如果您已經通過AJAX加載第二個列表的數據,爲什麼不通過通過AJAX禁用並啓用第二個列表JavaScript的?

可以在模板中使用硬編碼(使用純HTML)或使用Javascript(文檔加載後)完成禁用。

對於啓用,使用AJAX調用的回調方法(在成功事件上)。

這將是可以知道,你怎麼實際上做的AJAX調用(jQuery的?)。

0

那麼,最乾淨的方法是學習「如何編寫自己的小部件」,並實際編寫它。作爲一個粗略的例子,你可以看看sfWidgetFormDate

6

$ this-> widgetSchema ['field'] - > setAttribute('readonly','readonly');

+1

感謝您的答案,我會嘗試這個並讓你知道 - > setAttribute('disabled','disabled');爲我工作。 – 2011-07-27 05:27:01

+2

這是正確的方法。如果您設置爲禁用並提交表單,並且表單未通過驗證,則任何設置爲禁用的小部件都不會重新加載。設置爲只讀在我的聖盃工作。 – 2013-02-08 02:00:36

+0

我同意這是正確的方法。將該屬性設置爲禁用意味着如果另一個字段驗證失敗,禁用的表單字段的值將不會被重新填充。只讀ftw。 – overgroove 2014-05-16 19:15:37