2016-04-07 21 views
2

我得到從控制器的JSON數據,並顯示在下拉選擇box.but當我得到空值在JSON我想顯示文本框的下拉列表。手動填寫數據。如何獲取文本框,而不是下拉選擇框,如果從json獲得空值

public function getyear(Request $request){ 
    $appraisals=new Appraisals(); 
    $serial=$_GET['ser']; 
    $brand=$_GET['brand']; 

    $year_array=''; 

    $serial_number=$appraisals->get_years($brand,$serial); 


    if(isset($serial_number)): 
    foreach($serial_number as $years): 

    $yrs=$years->year_start; 
    $yre=$years->year_end; 
    endforeach; 
    endif; 
    if(!empty($serial_number)){ 
     if($yrs!="" && $yre!=""){ 

      for($i=$yrs;$i<=$yre;$i++): 

      $year_array.="<option value='".$i."'>".$i."</option>"; 
      endfor; 
     } 
    } 
    else 
    { 
     //for($i=1840;$i<1940;$i++): 
     $year_array.="<input type='text' value=''>"; 
     //endfor; 

    } 


    return response()->json(['success' => true,'years_array'=>$year_array]); 
    exit; 
} 

Java腳本函數:

$('#serial').blur(function() { 
     var ser=$(this).val(); 
     var brand=$('#brand').val(); 

     brand = brand.split('%') ; 

     $.getJSON("{!! URL::route('appraisal.getyear') !!}", {brand: brand[0],ser:ser}, function(data) { 


      if(data.success) 
       { 

       $('#year').html(data.years_array); 

       } 

      }); 

     }); 

視圖文件:

<div class="form-group"> 
        <label>Serial number</label> 
        {{Form::text('serial_number', null, ['placeholder' => 'Enter serial no','class'=>'form-control','id'=>'serial'])}} 
       </div> 


        <div class="form-group" id="yeartext"> 
        <label>Select Year</label> 
        <span class="years"></span> 
        @if($years=="") 
        {{Form::text('year', null, ['placeholder' => 'Enter Year no','class'=>'form-control','id'=>'year'])}} 
        @else 
        {{Form::select('year',$years, null, ['placeholder' => 'Pick a year','class'=>'form-control','id'=>'year'])}} 
        @endif 
       </div> 

如何顯示文本框,而不是選擇框我沒有得到任何教程,因此任何幫助將是大大地appricated。

+0

只是試試if(strlen($ year))true show select顯示文本框 – umefarooq

回答

2

我有一個soluation爲您的問題

Firsly只需在您的控制器上你的getJSON請求 一兩件事重新創建整個 元素,你需要使用$。獲得方法上$ .getJSON

$year_array=''; 
$year_array.="<label>Select Year</label>"; 
$year_array.="<span class='years'></span>"; 
if(!empty($serial_number)){ 
    if($yrs!="" && $yre!=""){ 
     $year_array.="<select name='year'>"; 
     for($i=$yrs;$i<=$yre;$i++): 
     $year_array.="<option value='".$i."'>".$i."</option>"; 
     endfor; 
     $year_array.="</select>"; 
    } 
} 
else 
{ 
    $year_array.="<input type='text' value=''>"; 
} 

不是你的「yeartext」 DIV

添加HTML
$("#yeartext").html(data.years_array); 
+0

太棒了!其工作非常感謝。 – vikash

1

我做你的代碼非常semplified版本,只爲讓您瞭解這個概念:

控制器:

public function getyear(Request $request){ 

    $years_array = []; 
    if(isset($request->brand)){ 
     for($i = 1900; $i<2001; $i++){ 
      $years_array[] = $i; 
     } 
    } 

    $response['success'] = true; 
    $response['empty'] = empty($years_array); 

    if(!empty($years_array)) $response['years_array'] = $years_array; 


    return response()->json($response); 
} 

的Javascript:

$.getJSON("{!! URL::route('appraisal.getyear') !!}", {brand: brand[0],ser:ser}, function(data) { 
    if(data.success === false) return; 

    $year_container = $('#yeartext'); 
    if(data.empty === false){ 
     $select = $('<select></select>') 

     for(i=0; i<data.years_array.length; i++){ 
      $select.append('<option value="'+ data.years_array[i] +'">'+ data.years_array[i] +'</option>') 
     } 

     $year_container.append($select); 
    } 

    else{ 
     $year_container.append('<input type="text" name="year"'); 

    } 

}); 
相關問題