Вы можете легко вызвать событие при изменении ввода. Однако при вызове getPlaces() вы получите undefined. Если вам действительно нужен список мест для типизированного запроса, вам может быть лучше использовать службу автозаполнения.
https://developers.google.com/maps/documentation/javascript/reference#AutocompleteService
input.on('keydown', function() {
google.maps.event.trigger(searchBox, 'places_changed');
});
EDIT Below is an example of how to use the AutocompleteService
<!DOCTYPE HTML>
<html>
<head>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
<script>
var init = function() {
var query = document.getElementById('query'),
autocomplete = new google.maps.places.AutocompleteService();
query.addEventListener('keyup', function() {
if (this.value.length === 0) {
return;
}
autocomplete.getPlacePredictions({input: this.value}, function(predictions, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(predictions);
}
});
});
}
</script>
</head>
<body onload="init()">
<input type="text" id="query" placeholder="Search">
</body>
</html>
Если пользователь печатает что-то, то вы, вероятно, не хотите искать каждый раз, когда они вводят символ. Таким образом, вы можете установить таймер перед выполнением поиска.
var searchWait;
query.addEventListener('keyup', function() {
//make sure we clear any previous timers before setting a new one
clearTimeout(searchWait);
if (this.value.length === 0) {
return;
}
searchWait = setTimeout(function(searchValue) {
return function() {
autocomplete.getPlacePredictions({input: searchValue}, function(predictions, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(predictions);
}
});
}
}(this.value), 500);
});