2016-03-22 18 views
0

Birkaç 'koşullu' alanla uzun, karmaşık bir formum var - B alanı, yalnızca alan A'nın örneğin 'Evet' olarak işaretli olup olmadığını gösterir. İşte Laravel 4: yönlendirme değerlerine erişmek '-> withInput()'

HTML var:

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

sorun ikinci alanda bir doğrulama hata varsa formu, orijinal giriş kabul edilmesi değil sunulduğunda ve hidden sınıf hala ekleniyor ikinci alan grubuna. Bu kod, düzenleme yapılacak verilerle birlikte formu yeniden yüklerken değil, doğrulama hatası gönderilirken bu kodun çalıştığı durumlarda çalışır. Ben doğru dönüş verilere başvurulması değilim tahmin ediyorum

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

, ama yanlış nereye gidiyorum bilemiyorum: doğrulama kodu şöyle.

Girdi değiştiğinde alanları genişletmek için jQuery'yi kullanıyorum, ancak bu, bir doğrulama hatasından sonra yeniden yüklendiğinde alanları dikkate almıyor. DAHA CLAIRTY İÇİN

DÜZENLEME:

İşte bir örnek. Evet'i seçtiğimde ancak 'neden' yanıtını boş bırakırsam ve bu zorunlu bir alan ise, Laravel back()->withErrors() bitini yazdığında, metin alanı ekranda görünmez. soruna

<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

Bana, form değerlerini kabul eden denetleyicideki işlevi gösterebilir misiniz? – Vagabond

cevap

0

bir çözüm bu formu göndermeden önce ulaşmak için gereken bir şey olduğu için jQuery çözülebilecek olmasıdır. $ Input ['happy'] sadece gönderdikten sonra sadece bir değer alır.

Sorununuza bir çözüm bulmaya geri dönün.

Bunu, görünümün sonunda veya ayrı bir .js dosyasında snippet olarak ekleyebilirsiniz.

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

Ben yardımcı olur umarım şu şekildedir:

jQuery kod olabilir. Olmasaydı haber ver.

+0

Teşekkürler, ama o zaten var. Laravel, w/errors formunu döndürdüğünde, gizli bölümündeki alanlar, girişi almadığı için gösterilmiyor. Daha iyi bir örnekle güncellememe izin verin ... – TH1981