I’m using the IONIC framework and I’m trying to implement the autocomplete fields in the Google Maps API. When it does not work on my project on which work I have tried to create a blank project to test the code. To my surprise there it works:
Code that works( index.html ):
<div id="locationField"> <input id="autocomplete" placeholder="Enter your address" onFocus="geolocate()" type="text"></input> </div>
<script>
var placeSearch, autocomplete; /*var componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' };*/
function initAutocomplete() { // Create the autocomplete object, restricting the search to geographical // location types. autocomplete = new google.maps.places.Autocomplete( /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')), {types: ['geocode']});
// When the user selects an address from the dropdown, populate the address // fields in the form. autocomplete.addListener('place_changed', fillInAddress); }
// [START region_fillform] function fillInAddress() { // Get the place details from the autocomplete object. var place = autocomplete.getPlace();
for (var component in componentForm) { document.getElementById(component).value = ''; document.getElementById(component).disabled = false; }
// Get each component of the address from the place details // and fill the corresponding field on the form. for (var i = 0; i < place.address_components.length; i++) { var addressType = place.address_components[i].types[0]; if (componentForm[addressType]) { var val = place.address_components[i][componentForm[addressType]]; document.getElementById(addressType).value = val; } } } // [END region_fillform]
// [START region_geolocation] // Bias the autocomplete object to the user's geographical location, // as supplied by the browser's 'navigator.geolocation' object. function geolocate() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var geolocation = { lat: position.coords.latitude, lng: position.coords.longitude }; var circle = new google.maps.Circle({ center: geolocation, radius: position.coords.accuracy }); autocomplete.setBounds(circle.getBounds()); }); } } // [END region_geolocation]
</script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAerQ5pzis73-ojGb2D-Rom3NFiS5s1Y7U&libraries=places&callback=initAutocomplete" async defer></script> </html>
On the other hand, in the project in which I want to include this code (tabs project) I have it put this way:
compartir.html:
<div id="locationField"> <input id="autocomplete" placeholder="Enter your address" onFocus="geolocate()" type="text"></input> </div>
index.html:
<script>
var placeSearch, autocomplete; /*var componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' };*/
function initAutocomplete() { // Create the autocomplete object, restricting the search to geographical // location types. autocomplete = new google.maps.places.Autocomplete( /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')), {types: ['geocode']});
// When the user selects an address from the dropdown, populate the address // fields in the form. autocomplete.addListener('place_changed', fillInAddress); }
// [START region_fillform] function fillInAddress() { // Get the place details from the autocomplete object. var place = autocomplete.getPlace();
for (var component in componentForm) { document.getElementById(component).value = ''; document.getElementById(component).disabled = false; }
// Get each component of the address from the place details // and fill the corresponding field on the form. for (var i = 0; i < place.address_components.length; i++) { var addressType = place.address_components[i].types[0]; if (componentForm[addressType]) { var val = place.address_components[i][componentForm[addressType]]; document.getElementById(addressType).value = val; } } } // [END region_fillform]
// [START region_geolocation] // Bias the autocomplete object to the user's geographical location, // as supplied by the browser's 'navigator.geolocation' object. function geolocate() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var geolocation = { lat: position.coords.latitude, lng: position.coords.longitude }; var circle = new google.maps.Circle({ center: geolocation, radius: position.coords.accuracy }); autocomplete.setBounds(circle.getBounds()); }); } } // [END region_geolocation]
</script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAerQ5pzis73-ojGb2D-Rom3NFiS5s1Y7U&libraries=places&callback=initAutocomplete" async defer></script>
When running it does not appear errors in console, but nevertheless when analyzing the network of the navigator I encounter this error:
InvalidValueError: not an instance of HTMLInputElement ? ionicplatform=ios:28 console.(anonymous function) @ ?ionicplatform=ios:28