Tengo configurado Google Autocomplete para un campo de texto de un formulario HTML y funciona perfectamente.
Sin embargo, cuando aparece la lista de sugerencias, y usa las flechas para desplazarse y seleccionar usando enter, envía el formulario, aunque todavía hay casillas para completar. Si hace clic para seleccionar una sugerencia, funciona bien, pero presionar enter envía .
¿Cómo puedo controlar esto? ¿Cómo puedo dejar de ingresar y dejar de enviar el formulario y, en cambio, ser la selección de una sugerencia de autocompletar?
¡Gracias! {S}
autocomplete
kinkersnick
fuente
fuente
keyup
durante la última media hora tratando de resolver mi problema, lo cual hiciste. Entonces, gente, no usenkeyup
para recibir presentaciones de formulariosUsar el manejo de eventos de Google parece la solución adecuada, pero no me funciona. Esta solución jQuery está funcionando para mí:
.pac-container
es el div que contiene las coincidencias de Autocompletar. La idea es que cuando las coincidencias estén visibles, la tecla Enter simplemente seleccionará la coincidencia activa. Pero cuando las coincidencias están ocultas (es decir, se ha elegido un lugar) enviará el formulario.fuente
.pac-container
a otra cosa, esto se romperá.He fusionado las dos primeras respuestas de @sren y @mmalone para producir esto:
funciona perfectamente en la página. evita que el formulario se envíe cuando el contenedor de sugerencias (.pac-container) está visible. Entonces, ahora, se selecciona una opción del menú desplegable de autocompletar cuando los usuarios presionan la tecla Intro, y tienen que presionarla nuevamente para enviar el formulario.
Mi razón principal para usar esta solución es porque descubrí que si el formulario se envía tan pronto como se selecciona una opción, a través de la tecla Intro, los valores de latitud y longitud no se pasan lo suficientemente rápido a sus elementos de formulario ocultos.
Todo el crédito a las respuestas originales.
fuente
Este funcionó para mí:
Se puede convertir fácilmente de ES6 a cualquier código compatible con el navegador.
fuente
El problema que tuve con la respuesta de @ sren fue que siempre bloquea el evento de envío. Me gustó la respuesta de @ mmalone, pero se comportó de forma aleatoria, ya que a veces cuando presiono
ENTER
para seleccionar la ubicación, el controlador se ejecuta después de que el contenedor está oculto. Entonces, esto es lo que terminé haciendovar 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>
La bandera asegura que si se cambia la ubicación y el usuario presiona Enter, el evento se bloquea. Finalmente, el evento de
false
Google Map establece la banderaplace_changed
, que luego permite que el formulario se envíe al presionar la tecla Intro.fuente
Aquí hay un código simple que funcionó bien para mí (no usa jquery).
Este fragmento de código, para seguir el código anterior, se utiliza para implementar el autocompletado de mapas de Google (con o sin la funcionalidad de la tecla Enter que se busca en esta pregunta):
selectOnEnter (llamado arriba en el primer fragmento de código) definido:
Este código hace que el campo de autocompletar de Google Maps seleccione cualquier elemento que el usuario seleccione con la tecla de flecha hacia abajo. Una vez que el usuario selecciona una opción presionando la tecla Enter, no sucede nada. El usuario tiene que presionar Enter nuevamente para activar onSubmit () u otro comando
fuente
Modifiqué el código de Alex porque se rompió en el navegador. Esto funciona perfecto para mí:
fuente
Probé las respuestas cortas anteriores pero no funcionaron para mí, y las respuestas largas no las quería probar, así que creé el siguiente código que funcionó bastante bien para mí. Ver demostración
Suponga que este es su formulario:
Entonces el siguiente código javascript resolverá el problema:
Y así es como se ve el código completo en la página HTML (tenga en cuenta que debe reemplazarlo
YOUR_API_KEY
con su clave api de Google):fuente
Úselo
$('.pac-item:first').trigger('click');
si desea seleccionar el primer resultadofuente
Puedes hacerlo en vainilla:
fuente