Ich habe Google Autocomplete für ein Textfeld eines HTML-Formulars eingerichtet und es funktioniert einwandfrei.
Wenn jedoch die Liste der Vorschläge angezeigt, und Sie mit den Pfeilen zu blättern und wählen Sie Eingabe verwenden, ist es das Formular abschickt, obwohl es immer noch Boxen sind in zu füllen. Wenn Sie einen Vorschlag auszuwählen klicken es gut funktioniert, aber das Pressen eingeben vorträgt .
Wie kann ich das kontrollieren? Wie kann ich verhindern, dass die Eingabe das Formular sendet, und stattdessen einen Vorschlag aus der automatischen Vervollständigung auswählen?
Vielen Dank! {S}
autocomplete
kinkersnick
quelle
quelle
keyup
der letzten halben Stunde versucht, mein Problem zu lösen, was Sie auch getan haben. Also, Leute, benutzt es nichtkeyup
, um Formulareingaben zu fangenDie Verwendung der Google-Ereignisbehandlung scheint die richtige Lösung zu sein, funktioniert aber bei mir nicht. Diese jQuery-Lösung funktioniert für mich:
.pac-container
ist das Div, das die Autocomplete-Übereinstimmungen enthält. Die Idee ist, dass, wenn die Übereinstimmungen sichtbar sind, die Eingabetaste nur die aktive Übereinstimmung auswählt. Wenn die Übereinstimmungen jedoch ausgeblendet sind (dh ein Ort ausgewählt wurde), wird das Formular gesendet.quelle
.pac-container
in etwas anderes umbenannt wird, dies nicht funktioniert.Ich habe die ersten beiden Antworten von @sren und @mmalone zusammengeführt, um dies zu erzeugen:
funktioniert perfekt auf der Seite. verhindert, dass das Formular gesendet wird, wenn der Vorschlagscontainer (.pac-container) sichtbar ist. Daher wird jetzt eine Option aus der Dropdown-Liste für die automatische Vervollständigung ausgewählt, wenn die Benutzer die Eingabetaste drücken und sie erneut drücken müssen, um das Formular zu senden.
Mein Hauptgrund für die Verwendung dieser Problemumgehung ist, dass ich festgestellt habe, dass beim Senden des Formulars nach Auswahl einer Option über die Eingabetaste die Breiten- und Längengrade nicht schnell genug an die ausgeblendeten Formularelemente übergeben wurden.
Alle Anerkennung für die ursprünglichen Antworten.
quelle
Dieser hat für mich gearbeitet:
Kann einfach von ES6 in einen beliebigen browserkompatiblen Code konvertiert werden.
quelle
Das Problem, das ich mit der Antwort von @ sren hatte, war, dass es das Submit-Ereignis immer blockiert. Ich mochte die Antwort von @ mmalone, aber sie verhielt sich zufällig, da manchmal, wenn ich drückte
ENTER
, um den Ort auszuwählen, der Handler lief, nachdem der Container versteckt war. Also, hier ist, was ich letztendlich getan habevar 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>
Das Flag stellt sicher, dass das Ereignis blockiert wird, wenn der Standort geändert wird und Benutzertreffer eingegeben werden. Schließlich wird das Flag
false
durch dasplace_changed
Ereignis von Google Map gesetzt , wodurch das Formular beim Drücken der Eingabetaste gesendet werden kann.quelle
Hier ist ein einfacher Code, der für mich gut funktioniert hat (verwendet keine JQuery).
Dieser Code wird, um dem obigen Code zu folgen, verwendet, um die automatische Vervollständigung von Google Maps zu implementieren (mit oder ohne die in dieser Frage gesuchte Eingabetaste):
selectOnEnter (oben im ersten Code aufgerufen) definiert:
Mit diesem Code wählt das Feld für die automatische Vervollständigung von Google Maps das Element aus, das der Benutzer mit dem Abwärtspfeil auswählt. Sobald der Benutzer eine Option durch Drücken der Eingabetaste auswählt, geschieht nichts mehr. Der Benutzer muss erneut die Eingabetaste drücken, um onSubmit () oder einen anderen Befehl auszulösen
quelle
Ich habe Alex 'Code optimiert, weil er im Browser kaputt gegangen ist. Das funktioniert perfekt für mich:
quelle
Ich habe die obigen kurzen Antworten ausprobiert, aber sie haben bei mir nicht funktioniert, und die langen Antworten wollte ich nicht ausprobieren. Deshalb habe ich den folgenden Code erstellt, der für mich ziemlich gut funktioniert hat. Siehe Demo
Angenommen, dies ist Ihr Formular:
Dann löst der folgende Javascript-Code das Problem:
Und so sieht der vollständige Code auf der HTML-Seite aus (Beachten Sie, dass Sie den Code
YOUR_API_KEY
durch Ihren Google API-Schlüssel ersetzen müssen ):quelle
Verwenden
$('.pac-item:first').trigger('click');
Sie diese Option, wenn Sie das erste Ergebnis auswählen möchtenquelle
Sie können es in Vanille tun:
quelle