This issue plagued me for quite sometime. A year ago I integrated google maps with autocomplete into my Ionic app and from the get go I was experiencing the long press issue. Essentially, when contextual suggestions were appearing in the input window the user would select on the name/address to autocomplete the address field - but nothing would happen.
The user would actually have to do a long press on the option in order for that one to be selected. I dealt with it so long that I just got used to it. However, it is NOT an intuitive thing for users to do - they simply think its broken because their single tap isn’t selecting the address.
I came across this fix today and wanted to repost and share it…apparently it is Ionic specific issue:
I use an external global function to bind the google places/autocomplete to my maps start/dropoff input fields. So in my maps controller I have:
autoComplete('map_pickupInput',1) ; autoComplete('map_dropoffInput',2) ;
However, you bind googles autocomplete, you will then need this in your maps controller:
$scope.disableTap = function(id) {
var container = document.getElementsByClassName('pac-container');
angular.element(container).attr('data-tap-disabled', 'true');
var backdrop = document.getElementsByClassName('backdrop');
angular.element(backdrop).attr('data-tap-disabled', 'true');
angular.element(container).on("click", function() {
document.getElementById(id).blur();
})
And in your maps HTML:
Pickup: <input type="text" id="map_pickupInput" ng-model="search1" data-tap-disabled="true" ng-change="disableTap('map_pickupInput');"></input> Drop Off: <input type="text" id="map_dropoffInput" ng-model="search2" data-tap-disabled="true" ng-change="disableTap('map_dropoffInput');"></input>
And here is my global function that binds google’s autocomplete to the maps input fields (my input fields are outside of the map itself:
function autoComplete(inputID,type) { //inputID = text input ID // type = start vs end point var input = /** @type {HTMLInputElement} */( document.getElementById(inputID));
var options = { types: ['address'], };
var autocomplete = new google.maps.places.Autocomplete(input); // add options here if necessary
google.maps.event.addListener(autocomplete, 'place_changed', function() { var newAddy, newName ; var place = autocomplete.getPlace(); if (place.name) { newAddy = place.formatted_address ; newName = place.name ; } else if (place.formatted_address) { newAddy = place.formatted_address ; newName = place.name ; } else if (!place.geometry) { // do something with error } }); }
Kudos and props to Abhay Kumar for originally posting how to do this: Google Places Api integration with IONIC and the Long Press Issue