2016-03-22 9 views
0

Ich habe eine lange, komplexe Form mit mehreren 'bedingten' Felder - Feld B zeigt nur, wenn Feld A beispielsweise als 'Ja' markiert ist.Laravel 4: Zugriff auf Werte von Umleitung '-> withInput()'

Hier ist der HTML:

<div class="{{ $errors->has('happy') ? ' has-error' : false }}"> 
    {{Form::label('happy', 'Are you happy?')}} 
    {{Form::select('happy', array('' => '--', 'Yes' => 'Yes', 'No' => 'No'),(!empty($input['happy']) ? $input['happy'] : null), ['class'=>'dependent']);}} 
</div> 
<div class="{{ !empty($input['happy']) && $input['happy'] == 'Yes' ? null : 'hidden'}} dependent" data-dependent-field="happy" data-dependent-value="Yes"> 
    {{Form::label('second-field', 'Only asked if you\'re happy')}} 
    {{Form::textarea('second-field',!empty($input['second-field']) ? $input['second-field'] : null)}} 
</div> 

Das Problem ist, wenn das Formular abgeschickt wird, wenn es in dem zweiten Feld ein Validierungsfehler ist, wird der ursprüngliche Eingang nicht erkannt zu werden und die hidden Klasse wird noch hinzugefügt zu der zweiten Reihe von Feldern.

Dieser Code funktioniert beim erneuten Laden des Formulars mit Daten zum Bearbeiten, aber nicht, wenn der Validierungsfehler gesendet wird. Die Code-Validierung sieht wie folgt aus:

 if($validation->fails()){ 
      return Redirect::back()->withInput()->withErrors($validation->errors())->with(['flash_message'=>'Please check your inputs again.']); 
     } 

Ich vermute, ich bin nicht Referenzierung die Rückgabedaten korrekt, kann aber nicht herausfinden, wo ich falsch gehe.

Ich benutze bereits jQuery, um die Felder zu erweitern, wenn die Eingabe geändert wird, aber dies kümmert sich nicht um die Felder, wenn es nach einem Überprüfungsfehler neu geladen wird.

EDIT MEHR CLAIRTY:

Hier ist ein Beispiel. Wenn ich "Ja" wähle, aber die Antwort "Warum" leer lässt und es ein Pflichtfeld ist, zeigt Laravel das back()->withErrors() Bit an, der Textbereich wird nicht auf dem Bildschirm angezeigt.

<div class="row {{ $errors->has('happy') ? ' has-error' : false }}"> 
    {{Form::label('happy', 'Field Label', ['class'=>'span12'])}} 
    <div class="span3"> 
     {{Form::select('happy', array('' => '--', 'Yes' => 'Yes', 'No' => 'No'),(!empty($input['happy']) ? $input['happy'] : null), ['class'=>'dependent']);}} 
    </div> 
</div> 

<div class="row"> 
    <div class="span12"> 
     <div class="{{ !empty($input['happy']) && $input['happy'] == 'No' ? null : 'hidden'}} dependent" data-dependent-field="happy" data-dependent-value="No"> 

      <div {{ $errors->has('why-not-happy') ? ' has-error' : false }}"> 
       {{Form::label('why-not-happy', 'Why aren\'nt you happy?')}} 
       {{Form::textarea('why-not-happy',!empty($input['why-not-happy']) ? $input['why-not-happy'] : null)}} 
      </div> 

     </div> 
    </div> 
</div> 
+0

Können Sie mir die Funktion in der Steuerung zeigen, die die Formularwerte akzeptiert? – Vagabond

Antwort

0

Eine Lösung für das Problem ist, dass es durch jQuery angegangen werden könnten, weil dies etwas, das Sie vor dem Absenden des Formulars erreichen müssen. Der $ input ['happy'] erhält erst nach dem Senden einen Wert.

Zurück zum Finden einer Lösung für Ihr Problem.

Sie können dies als Snippet am Ende der Ansicht oder in einer separaten .js-Datei einfügen.

Der Code jQuery könnte wie folgt sein:

<script type='text/javascript'> 
    $(function() { 
    //you may assign an id to the dropdown, just in case, and mention it as a selector 
    $('select.dependent').change(function(d){ 
     d.preventDefault(); 
     var selectValue = this.val(); 
     if(selectValue !='happy' || selectValue.length === 0){ 
      //Whatever you want to achieve when the selected value is NOT happy or empty 
      $('div.dependent').addClass('hidden'); 
     }  
    }); 
    }); 
</script> 

Ich hoffe, es hilft. Lass es mich wissen, wenn nicht.

+0

Danke, aber dieses bisschen habe ich schon. Wenn Laravel das Formular mit Fehlern zurückgibt, werden die Felder im ausgeblendeten Abschnitt nicht angezeigt, da die Eingabe nicht übernommen wird. Lass mich mit einem besseren Beispiel updaten ... – TH1981