How to use AutoComplete Listener
Mohsing511 opened this issue · 18 comments
i am finding it difficult to join map with input field which can be used to auto complete Help will be appreciated please reply fast
This isn't something this package doesn't do out of the box, but has been done before, see: #114
its not working correctly here is my code
my form
{!! Mapper::renderJavascript() !!}
{!! Form::open(array('action' => 'locationController@store','method' => 'POST','id'=>'form_location')) !!}
<div class="form-group col-lg-12">
{{Form::label('address','Address Manual')}}
{{Form::text('address','',['class'=>'form-control','placeholder'=>'Address here','id'=>"Manual",'name'=>"address"])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('lati','Latitude')}}
{{Form::text('latitude','',['class'=>'form-control','placeholder'=>'Latitude','id'=>"lat",'name'=>"lati"])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('longi','Longitude')}}
{{Form::text('longitude','',['class'=>'form-control','placeholder'=>'Longitude','name'=>'long','id'=>'long'])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('Search','Search Places Here')}}
{{ Form::input('text', 'location', null, ['id' => 'location', 'class' => 'form-control']) }}
</div>
<div class="form-group col-lg-12">
<div style="height: 600px;width: 90%" id="map"> {!! Mapper::render() !!}</div>
</div>
<div class="col-lg-12">
<center>{{Form::Submit('Submit Location',['class' => 'btn btn-success btn-lg'])}}</center>
</div>
{!! Form::close() !!}
and here is controller which displays map
public function create()
{
Mapper::map(31.5204, 74.3587,['marker'=>false,'zoom' => 12,'animation' => 'DROP','eventAfterLoad' => "new google.maps.places.Autocomplete(document.getElementById('mapaddress'));"])->marker(31.5204, 74.3587,['markers' => ['title' => 'lahore','symbol' => 'circle', 'scale' => 1000,], 'animation' => 'DROP', 'draggable' =>true,'eventDragEnd' =>"(document.getElementById('lat').value=(event.latLng.lat())); (document.getElementById('long').value=(event.latLng.lng()))",'google.maps.places.Autocomplete']);
return view ('sadminpages.location.create');
}
and here is script code
<script>
var autocomplete = new google.maps.places.Autocomplete(document.getElementById('location'));
var form_location = $('#form_location');
form_location.on('submit', function(e){
e.preventDefault();
});
google.maps.event.addListener(autocomplete, 'place_changed', function(){
var place = autocomplete.getPlace();
if(!place.geometry)
{
$.ajax({
type: "POST",
url: form_location.attr('action'),
data: form_location.serialize(),
success: function(location)
{
var latLng = new google.maps.LatLng(location.latitude, location.longitude);
maps[0].map.setCenter(latLng);
new google.maps.Marker({position: latLng, map: maps[0].map, draggable: true});
}
});
}
else
{
maps[0].map.setCenter(place.geometry.location);
maps[0].markers[0].setPosition(place.geometry.location);
}
});
</script>
Do you have any console errors?
What version of this package are you using? It appears to be old as the src for marker cluster has changed.
You also appear to be using a reference to an element that doesn't exist document.getElementById('mapaddress')
Also you need to setup your Google Maps API key properly (and also enable a development host), see: https://developers.google.com/maps/documentation/javascript/get-api-key
"cornford/googlmapper": "2.*" (in composer.json)
and document.getElementById('mapaddress') =>(my Bad!!! i added this id on search input)
but still getting these errors and i have placed API key in vendor/comford/googlemapper/src/config/config.php
'key' => env('GOOGLE_API_KEY', 'AIzaSyAtqWsq5Ai3G***********'
It may require you to re-publish the package assets, as version 2.37.0 has the correct path for marker clusters (Ensure you are up to date by running composer update
). This can be done by running: php artisan vendor:publish --provider="Cornford\Googlmapper\MapperServiceProvider" --tag=googlmapper --force
The api key should live within your packages app/config/packages/cornford/googlmapper/config.php
under the key variable.
Furthermore you API key doesnt appear to have permissions to run the palces api.
should i use this script in blade file or not
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCGC**********&libraries=places"></script>still have same problem auto complete is not working showing this error given below
This page can't load google map correctly
in Script link we use this. i think something like this is missing in my code or my java Script function is not working
libraries=places
guide me please i am stucked and working since last three day on maps
in my controller
Mapper::map(31.5204, 74.3587, ['eventAfterLoad' => "searchmap()"]);
and script function is
<script>
function searchmap() {
console.log('working');
var ac = new google.maps.places.Autocomplete(
(document.getElementById('location')), {
types: ['geocode']
});
ac.addListener('place_changed', function() {
var place = ac.getPlace();
if (!place.geometry) {
// User entered the name of a Place that was not suggested and
// pressed the Enter key, or the Place Details request failed.
// Do anything you like with what was entered in the ac field.
console.log('You entered: ' + place.name);
return;
}
console.log('You selected: ' + place.formatted_address);
});
}
</script>
whats wrong with this code
Thank You
Your script will need to be after the {!! Mapper::render() !!}
call in your template.
The places library is already included as part of this library.
What does your template look like?
Thanks for reply long waited
{!! Mapper::renderJavascript() !!}
@extends(Auth::guard('admin')->check() ? 'layouts.adminapp' : 'layouts.sadminapp')
@section('content')
<div class="col-lg-12"><center><h2 class="bg-primary">Location on map</h2></center></div>
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading" style="background: grey;"><center><h3 style="font-family:cursive;">Academy Location Form</h3></center></div>
<div class="panel-body bg-info">
{!! Form::open(array('action' => 'locationController@store','method' => 'POST','id'=>'form_location')) !!}
<div class="form-group col-lg-12">
{{Form::label('address','Address Manual')}}
{{Form::text('address','',['class'=>'form-control','placeholder'=>'Address here','id'=>"Manual",'name'=>"address"])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('lati','Latitude')}}
{{Form::text('latitude','',['class'=>'form-control','placeholder'=>'Latitude','id'=>"lat",'name'=>"lati"])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('longi','Longitude')}}
{{Form::text('longitude','',['class'=>'form-control','placeholder'=>'Longitude','name'=>'long','id'=>'long'])}}
</div>
<div class="form-group col-lg-12">
{{Form::label('Search','Search Places Here')}}
{{ Form::input('text','location','',['id' => 'location', 'class' => 'form-control']) }}
</div>
{{-- --}}
<div class="form-group col-lg-12">
<div style="height: 600px;width: 90%" id="map"> {!! Mapper::render() !!}</div>
</div>
<div class="col-lg-12">
<center>{{Form::Submit('Submit Location',['class' => 'btn btn-success btn-lg'])}}</center>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
@endsection
@section('javascript')
<script>
function searchmap() {
var autocomplete = new google.maps.places.Autocomplete($("#location")[0], {});
console.log(autocomplete);
google.maps.event.addListener(autocomplete, 'place_changed', function(){
var place = autocomplete.getPlace();
console.log(place.address_components);
if(!place.geometry)
{
//This is where I believe I need to do the ajax request.
console.log('Getting here on form submit with just a zip code. Not using an autocomplete selection.');
}
maps[0].map.setCenter(place.geometry.location);
maps[0].markers[0].setPosition(place.geometry.location);
});
}
</script>
@endsection
in controller to load map
Mapper::map(31.5204, 74.3587, ['eventAfterLoad' => "searchmap()"])->->marker(31.5204, 74.3587,['markers' => ['symbol' => 'circle', 'scale' => 1000,], 'animation' => 'DROP', 'draggable' =>true,'eventDragEnd' =>"(document.getElementById('lat').value=(event.latLng.lat())); (document.getElementById('long').value=(event.latLng.lng()))"]);
return view ('sadminpages.location.create');
how can i use callback function which runs after i type something in searchbox.
{!! Mapper::render() !!}
<input type='text' id='location'>
<script>
var input = document.getElementById('location');
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.addListener('place_changed', function() {
var place = autocomplete.getPlace();
if (!place.geometry) {
window.alert('No details available for input: ' + place.name);
return;
}
maps[0].map.setCenter(place.geometry.location);
maps[0].markers[0].setPosition(place.geometry.location);
});
</script>
You need to enable billing on your account for this to work!
I got it. i have to enable billing.
you are such a humble person very cooperative and helped me a lots.best wishes for you man.again thanks for your time :)