2016-12-12 2 views
0

ich viel gesucht haben, kann aber nicht die Antwort auf diese recht einfache Frage finden:Symfony 2 - verstecken Dynamisches Feld basierend auf Auswahl in einem anderen Feld

In Symfony 2.8 ich eine Form haben, dass ein rendert Länderfeld. Aufgrund seiner Auswahl möchte ich nur für die Auswahl 'Deutschland' (Daten 'D') eine Postleitzahl und ein Bundesland-Feld anzeigen. Hier ist der Code für das Land-Feld:

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

es mit der Wahl ‚Deutschland‘, Daten ‚D‘ vorbelegt ist.

basiert darauf, dass ich möchte dynamisch angezeigt werden:

->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')) 

Wenn „Deutschland“ nicht ausgewählt ist, ich will einfach verstecken/deaktivieren Sie diese Felder (und behandeln den Nullwert woanders).

Ich versuchte http://symfony.com/doc/current/form/dynamic_form_modification.html und einige andere Javascript Zeug, aber da ich im Grunde keine JS kenne, konnte ich keine geeigneten Ressourcen finden.

+1

Wir könnten Ihnen eine bessere Antwort geben, wenn Sie Ihren vollständigen Code für die Klassenart Country Form gepostet haben. Ich werde sehen, ob ich trotzdem eine einfache Antwort finden kann. –

Antwort

0

Da das Feld nationveranstaltungsort standardmäßig Deutschland ausgewählt hat, muss plzveranstaltungsort nicht ausgeblendet werden. Sie können wie unter Verwendung von etwas in Javascript verstecken:

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

Dann das Element Verwendung zu zeigen:

bund.style.display = "inline"; 

Abhängig davon, welche CSS Sie verwenden, könnten Sie verwenden müssen:

bund .style.display = "Blockieren";

In Sie bilden Sie ein Attribut festlegen können, wie so eine Javascript-Funktion auf Änderung auszuführen:

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

Dann in der Javascript-Funktion changeCountry() verstecken das Element oder zeigen den oben. Die IDs, die ich zeige, sind nicht das, was Sie verwenden, aber wenn Sie die Browser-Tools verwenden, zum Beispiel in Firefox (ich empfehle FireFox zum Testen), können Sie mit der rechten Maustaste auf das Auswahlelement klicken und "Element prüfen" wählen; dann können Sie sehen, was der "tatsächliche" ID-Wert ist, den Sie verwenden müssen. Es hängt von Ihrem Formularnamen ab.

+0

Danke, das hat sehr geholfen! Ich habe den Code ein wenig modifiziert, um den Wert des Widgets zu extrahieren, handle entsprechend und gab meinem Label eine eigene ID: 'function changeCountry() { if ($ (" # request_nationveranstaltungsort "). Val()! =" D ") { var bund = document.getElementById ("request_plzveranstaltungsort"); bund.style.display = "keine"; var bund2 = document.getElementById ('plzlabel'); bund2.style.display = "none"; 'und so weiter –

+0

Ich bin froh, dass es funktioniert hat! –

Verwandte Themen