2017-10-24 9 views
1

私はlaravelとdatatablesで遊んでいます。 Hereは、理解したい形式のフィルタリングオプションを持つテーブルです。 例では基本的にルートとコントローラを設定していますが、下のドロップダウンリストからajax経由で値を動的に取得することはできません。フォームからデータテーブルに値を渡す方法

<select class="form-control" id="asortment" name="asortment"> 
<option value="68">A</option> 
<option value="5">B</option> 
... 

のAjax通信を担当するJavascriptを:

<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.js"></script> 
<script> 
    $(document).ready(function() { 
     $('#datatable').DataTable({ 
      "processing": true, 
      "serverSide": true, 
      "ajax": { 
       url: "{{ route('api.products.index') }}", 
       data: function (d) { 
        d.product = $('input[name=product]').val(); 
        d.fromDate = $('input[name=fromDate]').val(); 
        d.toDate = $('input[name=toDate]').val(); 
        d.asortment = $('input[name=asortment]').val(); 
       }, 
      }, 
      "columns": [ 
       { "data": "Name", }, 
       { "data": "Type" }, 
       { "data": "Asortment" }, 
       { "data": "Margin" } 
      ] 
     }); 
    }); 

    $('#search-form').on('submit', function(e) { 
     oTable.draw(); 
     e.preventDefault(); 
    }); 
</script> 

マイAPIコントローラは次のようになります。

class APIController extends Controller 
{ 
    public function getProducts(Request $request) 
    { 
     $product = $request->input('product'); 
     $fromDate = $request->input('fromDate'); 
     $toDate = $request->input('toDate'); 
     $asortment = $request->input('asortment'); 

     $query = DB::select('exec test.dbo.Products @startDate = ?, @endDate = ?, @asortment = ?, @produkt = ?', [$fromDate, $toDate, $asortment, $product]); 

     return datatables($query)->make(true); 
    } 

} 

問題:Ajaxは3つの値をとる(製品、fromDateから、toDateまで)を選択しますが、選択された形式の控除は受け付けません。

私が代わりに$("#asortment").val();から$('input[name=asortment]').val();変更、それを(ピュアjQueryの道を!)使用の理由は... :)

+1

'$( 'input [name = asortment]')をval();' $( "#asortment").val();で置き換えて試してください。 –

+0

@RutvijKothariそれは動作します。私は前に入力を選択し、効果なしで置き換えようとしました。あなたはすぐにそれが今正しい理由をちょっと説明できますか? –

+0

申し訳ありませんが、答えで説明しました。コメントはそれを説明する良い方法ではありません。 –

答えて

1

に少しの助けを必要としています。

$( '入力[名前= YOUT_NAME]')。val();ラジオボタン/選択/チェクボックスでは機能しません。

val()は、要素値の配列を渡すことを許可します。これは、 の中の、、、などの要素を含むjQueryオブジェクトを処理する場合に便利です( )。この場合、 の値を持つ入力とオプションが配列の要素の1つに一致するかどうかがチェックされます( )。 の要素の1つと一致しない値を持つ配列はチェックされません。タイプによっては選択されていません。 では、ラジオグループの一部であるsのケースでは、 が選択されています。以前に選択された要素はすべて選択解除されます。

このメソッド(またはネイティブの値プロパティを使用)を使用して値を設定しても、変更イベントのディスパッチは発生しません。このため、 関連のイベントハンドラは実行されません。 を実行する場合は、値を設定した後に.trigger( "change")に電話する必要があります。

これは、jQueryのdocumentationに記載されています。

関連する問題