2016-06-19 10 views
0

Ich habe gearbeitet, um Autocomplete zu meinem Standort Textfeld hinzufügen, ist das Problem, wenn ich jedes Wort auf sie eingeben, zeigt es immer das Ergebnis.php jQuery Autocomplete funktioniert nicht gut in Laravel

Das ist mein javascript:

<script type="text/javascript"> 
    $(function(){ 
     $("#Location").autocomplete({ 
      source: "{{ route('search.autocomplete') }}", 
      minLength: 3, 
      select: function(event, ui){ 
       $("#Location").val(ui.item.value); 
      } 
     }); 
    }); 
</script> 

diesem Zusammenhang die route.php

ist
Route::get('search/autocomplete', ['uses' => '[email protected]', 'as' => 'search.autocomplete']); 

Dies ist der searchController

public function autocomplete(Request $request){ 
     $term = $request->get('Location'); 

     $provinces = DB::table('provinces')->where('ProvinceName', 'LIKE', '%'. $term .'%') 
     ->orderBy('ProvinceName', 'desc') 
     ->get(); 

     $results = []; 
     foreach ($provinces as $province) { 
      $results[] = ['id' => $province->id, 'value' => $province->ProvinceName]; 
     } 
     return response()->json($results); 
} 

und dies ist der search.blade.php

<div class="form-group col-md-4"> 
       Location: {!!Form::text('Location', Request::get('Location'), ['class' => 'form-control', 'placeholder' => 'What is your location?', 'id' => 'Location', 'style' => 'width: 250px;'])!!} 
</div> 

Antwort

0

Okay, ich mein Problem zu lösen, ich ändern

route.php

Route::get('search/autocomplete', '[email protected]'); 

SearchController

if ($request->ajax()) { 
     $term = Input::get('term'); 

     $results = array(); 

     $queries = DB::table('provinces') 
      ->where('ProvinceName', 'LIKE', '%'.$term.'%') 
      ->take(5)->get(); 

     foreach ($queries as $query) 
     { 
      $results[] = [ 'id' => $query->id, 'value' => $query->ProvinceName ]; 
     } 
     return Response::json($results); 
} 

und mein Javascript

<script type="text/javascript"> 
    $(function() 
    { 
     $("#Location").autocomplete({ 
      source: "{{ url('search/autocomplete') }}", 
      minLength: 3, 
      select: function(event, ui) { 
      $('#Location').val(ui.item.value); 
      } 
     }); 
    }); 
</script> 
0

Ein Array von Objekten mit Label und Wert Eigenschaften: [{label: "Choice1", Wert: "Wert1"}, ...]

die Label-Eigenschaft im Vorschlagsmenü angezeigt wird. Der Wert wird in das Eingabeelement eingefügt, wenn ein Benutzer ein Element auswählt. Wenn nur eine Eigenschaft angegeben wird, wird sie für beide verwendet, z. B. wenn Sie nur Werteigenschaften angeben, wird der Wert auch als Beschriftung verwendet.

ändern

$results[] = ['id' => $province->id, 'value' => $province->ProvinceName]; 

zu

$results[] = ['value' => $province->id, 'label' => $province->ProvinceName]; 

Und

$("#Location").val(ui.item.value); 

Um

$("#Location").val(ui.item.label); 
id 10

Einsatz im Frontend als

ui.item.value 
+0

nichts passiert, es gibt immer alle meine Daten in meiner Datenbank zurück. Es bedeutet, dass jedes Mal, wenn ich irgendwelche Wörter in mein Textfeld eintippte, es keine Rolle spielte. – Joseph

+0

[{"id": 2, "wert": "Test1"}, {"id": 1, "wert": "Test2"}] dies ist mein json return. – Joseph

Verwandte Themen