2016-12-12 78 views
0

我已經搜查了很多的選擇,但無法找到答案,這個簡單的問題:Symfony的2 - 動態隱藏字段基於在另一場

在Symfony的2.8我有一個表格,用來渲染國家領域。基於它的選擇,我想顯示一個zipcode和federalstate字段,只用於'德國'選擇(數據'D')。以下是國家/地區的代碼:

   ->add('nationveranstaltungsort', ChoiceType::class, array(
        'choices' => array(
         'D' => 'Deutschland', 
         'AFG' => 'Afghanistan', 
//many other countries following     
        ), 
        'data' => 'D', 
        'label' => 'Nation Tagungsstätte')) 

它預先填充Choice'Deutschland',數據'D'。

基礎上,我要動態地顯示:

->add('plzveranstaltungsort', TextType::class, array('label' => 'PLZ', 'attr' => array('size' => '5', 'maxlength' => '5'))) 
       ->add('bundeslandveranstaltungsort', ChoiceType::class, array(
        'choices' => array(
         0 => '  ', 
         1 => 'Baden-Württemberg', 
         2 => 'Bayern', 
         3 => 'Berlin', 
         4 => 'Brandenburg', 
         5 => 'Bremen', 
         6 => 'Hamburg', 
         7 => 'Hessen', 
         8 => 'Mecklenburg-Vorpommern', 
         10 => 'Nordrhein-Westfalen', 
         11 => 'Rheinland-Pfalz', 
         12 => 'Saarland', 
         13 => 'Sachsen', 
         14 => 'Sachsen-Anhalt', 
         15 => 'Schleswig-Holstein', 
         16 => 'Thüringen', 
        ), 
        'data' => 0, 
        'label' => 'Bundesland Tagungsstätte')) 

如果沒有選擇「德國」,我只是想隱藏/禁用這些字段(和處理空值別的地方)。

我試圖http://symfony.com/doc/current/form/dynamic_form_modification.html和其他一些JavaScript的東西,但我根本不知道任何JS,我找不到任何適當的資源。

+1

我們可以給你一個「好」的答案,如果你發佈你的完整代碼的國家Form類類型。不管怎樣,我會看看我能不能提出一個簡單的答案。 –

回答

0

由於默認情況下nationveranstaltungsort字段已選中德國,因此不需要隱藏plzveranstaltungsort

var bund = document.getElementById("bundeslandveranstaltungsort"); 
bund.style.display = "none"; 

然後顯示元素的使用:您可以通過使用類似的東西在Javascript中隱藏

bund.style.display = "inline"; 

取決於你所使用的CSS,你可能需要使用:

外灘.style.display =「block」;

在你形成你可以指定運行變化的JavaScript函數,像這樣的屬性:

->add('nationveranstaltungsort', ChoiceType::class, array(
    'choices' => array(
     'D' => 'Deutschland', 
     'AFG' => 'Afghanistan', 
    ), 
    'data' => 'D', 
    'label' => 'Nation Tagungsstätte', 
    'attr' => array(
      'onchange' => 'changeCountry()', 
    ), 
)) 
在JavaScript函數 changeCountry()

然後隱藏元素或使用上述表現出來。 我表明ID是不實際,你會用什麼,但如果你使用的瀏覽器工具,例如在Firefox(我建議使用Firefox瀏覽器測試),你可以選擇元素上單擊鼠標右鍵,選擇「檢查元素」;那麼你可以看到你需要使用的「實際」id值。這取決於你的表單名稱。

+0

謝謝,這幫了很大的忙!我修改了代碼有點提取部件的價值,採取相應的行動,給我的標籤自己ID:($(「#request_nationveranstaltungsort」)VAL()=「d」!)'函數changeCountry(){ 如果{ VAR堤岸=的document.getElementById( 「request_plzveranstaltungsort」); bund.style.display =「none」; var bund2 = document.getElementById('plzlabel'); bund2.style.display =「無」;'等等 –

+0

高興你得到它的工作! –