2017-02-22 6 views
0

2つの選択ドロップダウンがあります。 1つのドロップダウンから値を選択すると、もう1つの値に対応する値が入力されます。 onchange機能の間に ドロップダウンリストに値のリストを設定する方法

<g:select name="firstText" from="${eventsList}" noSelection="['':'-Choose the From Date-']" onchange="categoryChanged(this.value)" /> 
      <label>WayBill Id</label> 
      <select id="bill"> 
       <option>Select Bill</option> 
      </select> 

、私はコントローラへのAJAX呼び出しを行うと値 を取得しています。これは、

function categoryChanged(categoryId) { 
    alert(categoryId) 
    $.ajax({ 
     url:"<g:createLink url="[action:'categoryChanged',controller:'jsonComparison']" />", 
     asnyc: false, 
     data: {dateValue:categoryId}, 
     success: function(data){ 
      //var retrievedValue = JSON.parse(data); 
      alert("inside the success ajax function"+data) 

      //$("#wayBill1").val(retrievedValue.value1) 
      //$("#wayBill1").html(retrievedValue.value1) 
      //$('#wayBill1 :selected').text(); 
      var select = $('#bill'); 
      select.find('option').remove(); 
      $.each(retrievedValue,function() {    
        $('<option>').val(data).text(data).appendTo(select);   

      }); 

     } 
    }); 
} 

警告アラートが私のAjaxの機能である(「成功のAjax機能内部」+データ)が値で起動していますが、2番目のドロップダウンでは表示できません。値は、[0000-00.00,0001-00.00,0002-00.07] ような値のliistこれはJsonComparison.findAllByDateValueは、値のリストを返すか、他されるよう

def categoryChanged(){ 
     String firstParameter = params?.dateValue 
     def reply 
     def wayB = [] 
     wayB = JsonComparison.findAllByDateValue(firstParameter) 
     println "wayBill id: "+wayB.Bill 
     //reply = [status:true, value1:"${wayB.Bill}"] 
     render wayB.wayBill as List 


    } 

私はそれを正しくレンダリングしています私のコントローラクラスであります私はそれを表示中に間違っている。応答を受け取ったら、2番目の選択は空になり、値を入れません。

答えて

0

問題はここにある:

$.each(retrievedValue,function() {    
    $('<option>').val(data).text(data).appendTo(select);   
}); 

あなたは「未定義」を反復処理し、返されるデータのセット全体で各オプションを埋めるためにしてみてください。

render wayB.wayBill as JSON 

を、ドロップダウン移入ときにJSでこのJSONをパース:私のAJAX成功内部

$(data).each(function() { 
    $('<option>').val(this).text(this).appendTo(select); 
}); 
+0

のドロップダウンリストにwayB.wayBillをJSONとしてレンダリングするように変更しました。$(data).each(function(){ $('

+0

あなたの提案は私が問題を解決するのを助けた –

0

ドロップドウォンにオプションを追加する方法は修正されます。次のコードが役立つかどうか確認してください!

function categoryChanged(categoryId) { 
    alert(categoryId) 
    $.ajax({ 
     url:"<g:createLink url="[action:'categoryChanged',controller:'jsonComparison']" />", 
     asnyc: false, 
     data: {dateValue:categoryId}, 
     success: function(data){ 
      var retrievedValue = JSON.parse(data); 
      alert("inside the success ajax function"+data) 

      //$("#wayBill1").val(retrievedValue.value1) 
      //$("#wayBill1").html(retrievedValue.value1) 
      //$('#wayBill1 :selected').text(); 
      var select = $('#bill'); 
      select.find('option').remove(); 

      for(i=0;i<retrievedValue.length;i++) 
      { 
      $('<option/>', { 
       value: retrievedValue[i], 
       html: retrievedValue[i] 
      }).appendTo('#bill select'); 
      }; 

     } 
    }); 
} 
+0

アラートを

また、私はあなたがJSONにコントローラに返されたリストをキャストすることをお勧めします関数は私があなたが言及した方法を試してみたら今発射していません –

+0

私は "var retrievedValue = JSON.parse(data);"動作していない、この行の上に警告を表示し、参照してください。データが適切なJSON形式で提供されているかどうかを確認します。 –

+0

アラートに0000-00.000001-00.000002-00.07が表示されています –

関連する問題