Le problème que j'ai rencontré avec la réponse de @sren est qu'elle bloque toujours l'événement submit. J'aimais bien la réponse de @mmalone, mais elle se comportait de manière aléatoire, comme par exemple lorsque j'appuyais sur la touche ENTER
pour sélectionner l'emplacement, le gestionnaire s'exécute après que le conteneur soit caché. Voici donc ce que j'ai fini par faire
var location_being_changed,
input = document.getElementById("js-my-input"),
autocomplete = new google.maps.places.Autocomplete(input),
onPlaceChange = function () {
location_being_changed = false;
};
google.maps.event.addListener( this.autocomplete,
'place_changed',
onPlaceChange );
google.maps.event.addDomListener(input, 'keydown', function (e) {
if (e.keyCode === 13) {
if (location_being_changed) {
e.preventDefault();
e.stopPropagation();
}
} else {
// means the user is probably typing
location_being_changed = true;
}
});
// Form Submit Handler
$('.js-my-form').on('submit', function (e) {
e.preventDefault();
$('.js-display').text("Yay form got submitted");
});
<p class="js-display"></p>
<form class="js-my-form">
<input type="text" id="js-my-input" />
<button type="submit">Submit</button>
</form>
<!-- External Libraries -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
Le drapeau garantit que si l'emplacement est modifié et que l'utilisateur appuie sur la touche Entrée, l'événement est bloqué. Finalement, l'indicateur est mis à false
par les cartes de google place_changed
qui permet ensuite de soumettre le formulaire en appuyant sur la touche Entrée.