Ich habe google.maps.places.Autocomplete aus der Google Maps JavaScript API V3 in ein einfaches Suchformular eingefügt. Ich versuche eine zuverlässige Möglichkeit zu finden, zu erkennen, ob der Benutzer ein Element aus der Autocomplete-Liste (entweder mit der Maus oder der Tastatur) ausgewählt hat oder Freiform-Text einreicht.
Code: Ссылка
Ich teste mit den folgenden grundlegenden Szenarien, von denen jedes zu einer Formularübergabe führen sollte. locMatch
sollte true sein, wenn der Benutzer ein Autocomplete-Objekt ausgewählt hat.
Nur die Fälle 1, 3 und 4 funktionieren wie erwartet.
In # 2 wird onSubmit vor place_changed ausgelöst, sodass es keine Chance hat, locMatch zu setzen, bevor das Formular gesendet wurde. Es hilft nicht, place_changed manuell auszulösen, denn obwohl das Eingabefeld den richtigen Text hat, bleibt autocomplete.getPlace () undefiniert, bis das Senden des Formulars ausgelöst wird. Ich konnte es zwingen, mit einem schrecklichen setTimeout-Hack wie folgt zu arbeiten:
%Vor%Ich würde wirklich gerne einen vernünftigeren Weg finden, das zu beheben. Ich kann mir vorstellen, dass der Timeout-Wert von den technischen Daten eines Benutzers abhängt und ich keine unnötige Verzögerung möchte.
In # 5 ruft es nach dem Drücken der Eingabetaste nicht place_changed auf. Erneut habe ich versucht, ein Ereignis place_changed im Submit-Handler auszulösen, aber dies hat keine Auswirkungen, weil getPlace () den zuvor ausgewählten Wert zurückgibt, obwohl der Benutzer es im Eingabefeld eingegeben hat. Eine Möglichkeit, dies zu lösen, ist das Zurücksetzen von locMatches bei Änderung, aber dies unterbricht unten Nr. 6.
%Vor%In # 6 ist locMatch immer noch wahr vom vorherigen Klick, also gibt es das erwartete Ergebnis, aber es ist technisch nicht korrekt, da place_changed immer noch nach der Formularübergabe ausgelöst wird. Der obige Fix für # 5 bricht diesen Fall, aber die obige setTimeout-Methode behebt ihn erneut.
Ich habe mir den ganzen Tag über die Haare gezogen, jeder Rat würde sehr geschätzt werden. Danke!
Genau das gleiche Problem hier. Die Autocomplete-Bibliothek bietet kein anderes Ereignis als place_changed. Es gibt auch keine Statuseigenschaft, z.B. request_pending.
Es gibt einen "Hack" von mmalone hier: Google Autocomplete - zur Auswahl Arbeitete großartig für mich.
Tags und Links javascript jquery autocomplete google-maps-api-3 google-places-api