Mam ustawione autouzupełnianie Google dla pola tekstowego formularza HTML i działa idealnie.
Jednak gdy pojawia się lista sugestii i używasz strzałek do przewijania i wybierania za pomocą klawisza Enter , przesyła on formularz, chociaż nadal są pola do wypełnienia. Jeśli klikniesz, aby wybrać sugestię, działa dobrze, ale naciśnięcie klawisza Enter przesyła .
Jak mogę to kontrolować? Jak mogę powstrzymać Enter przed przesłaniem formularza i zamiast tego wybrać sugestię z autouzupełniania?
Dzięki! {S}
autocomplete
kinkersnick
źródło
źródło
keyup
przez ostatnie pół godziny próbuje rozwiązać mój problem, co zrobiłeś. Więc ludzie, nie używajciekeyup
do łapania zgłoszeń formularzyKorzystanie z obsługi zdarzeń Google wydaje się być właściwym rozwiązaniem, ale nie działa dla mnie. To rozwiązanie jQuery działa dla mnie:
.pac-container
to element div przechowujący dopasowania autouzupełniania. Chodzi o to, że kiedy dopasowania są widoczne, klawisz Enter po prostu wybiera aktywne dopasowanie. Ale gdy mecze zostaną ukryte (tj. Miejsce zostało wybrane), prześle formularz.źródło
.pac-container
na inną, to się zepsuje.Połączyłem dwie pierwsze odpowiedzi od @sren i @mmalone, aby uzyskać to:
działa idealnie na stronie. zapobiega przesłaniu formularza, gdy kontener sugestii (.pac-container) jest widoczny. Tak więc teraz opcja z listy rozwijanej autouzupełniania jest wybierana, gdy użytkownik naciśnie klawisz Enter i muszą nacisnąć go ponownie, aby przesłać formularz.
Moim głównym powodem zastosowania tego obejścia jest to, że stwierdziłem, że jeśli formularz jest wysyłany zaraz po wybraniu opcji, za pomocą klawisza enter, wartości szerokości i długości geograficznej nie były przekazywane wystarczająco szybko do ich ukrytych elementów formularza.
Wszystkie zasługi dla oryginalnych odpowiedzi.
źródło
Ten pracował dla mnie:
Można go łatwo przekonwertować z ES6 na dowolny kod zgodny z przeglądarką.
źródło
Problem, który miałem z odpowiedzią @ sren polegał na tym, że zawsze blokuje zdarzenie przesyłania. Podobała mi się odpowiedź @ mmalone, ale zachowywała się losowo, ponieważ czasami, gdy klikałem,
ENTER
aby wybrać lokalizację, program obsługi uruchamiał się po ukryciu kontenera. Oto, co ostatecznie zrobiłemvar 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>
Flaga zapewnia, że w przypadku zmiany lokalizacji i wejścia użytkownika, zdarzenie jest blokowane. Ostatecznie flaga jest ustawiana
false
przezplace_changed
zdarzenie mapy google , które następnie umożliwia przesłanie formularza po naciśnięciu klawisza Enter.źródło
Oto prosty kod, który działał dobrze dla mnie (nie używa jquery).
Ten fragment kodu, zgodnie z powyższym kodem, służy do implementacji autouzupełniania map Google (z lub bez funkcji klawisza Enter poszukiwanej w tym pytaniu):
selectOnEnter (wywołany powyżej w pierwszym fragmencie kodu) zdefiniowano:
Ten kod sprawia, że pole autouzupełniania map Google wybiera dowolny element, który użytkownik wybierze za pomocą klawisza strzałki w dół. Gdy użytkownik wybierze opcję za pomocą naciśnięcia klawisza Enter, nic się nie dzieje. Użytkownik musi ponownie nacisnąć klawisz Enter, aby wywołać onSubmit () lub inne polecenie
źródło
Poprawiłem kod Alexa, ponieważ zepsuł się w przeglądarce. To działa idealnie dla mnie:
źródło
Wypróbowałem powyższe krótkie odpowiedzi, ale nie zadziałały dla mnie, a długich odpowiedzi nie chciałem ich wypróbować, więc stworzyłem następujący kod, który działał dla mnie całkiem dobrze. Zobacz Demo
Załóżmy, że to jest twój formularz:
Wtedy poniższy kod javascript rozwiąże problem:
A oto jak wygląda pełny kod na stronie HTML (pamiętaj, że musisz zamienić na
YOUR_API_KEY
klucz google api):źródło
Użyj,
$('.pac-item:first').trigger('click');
jeśli chcesz wybrać pierwszy wynikźródło
Możesz to zrobić w wanilii:
źródło