У меня есть Google Autocomplete, настроенный для текстового поля HTML-формы, и он отлично работает.
Однако, когда появляется список предложений, и вы используете стрелки для прокрутки и выбора с помощью ввода, он отправляет форму, хотя есть еще поля для заполнения. Если вы щелкаете, чтобы выбрать предложение, оно работает нормально, но нажатие Enter отправляет .
Как я могу это контролировать? Как я могу остановить ввод от отправки формы, а вместо этого выбрать предложение из автозаполнения?
Благодаря! {S}
autocomplete
кинкерсник
источник
источник
keyup
течение последнего получаса , пытаясь решить мою проблему, которую вы сделали. Итак, люди, не используйте,keyup
чтобы поймать отправленные формыИспользование обработки событий Google кажется правильным решением, но у меня это не работает. Это решение jQuery работает для меня:
.pac-container
- это div, содержащий совпадения с автозаполнением. Идея состоит в том, что, когда совпадения видны, клавиша Enter просто выбирает активное совпадение. Но когда совпадения скрыты (т. Е. Место выбрано), он отправит форму.источник
.pac-container
во что-то другое, это сломается.Я объединил первые два ответа от @sren и @mmalone, чтобы получить следующее:
отлично работает на странице. предотвращает отправку формы, когда виден контейнер предложений (.pac-container). Итак, теперь опция из раскрывающегося списка автозаполнения выбирается, когда пользователи нажимают клавишу ввода, и им нужно нажать ее снова, чтобы отправить форму.
Моя основная причина использования этого обходного пути заключается в том, что я обнаружил, что если форма отправляется сразу после выбора опции с помощью клавиши ввода, значения широты и долготы не передаются достаточно быстро в их скрытые элементы формы.
Все заслуги оригинальных ответов.
источник
Это сработало для меня:
Может быть легко преобразован из ES6 в любой код, совместимый с браузером.
источник
Проблема с ответом @ sren заключалась в том, что он всегда блокирует событие отправки. Мне понравился ответ @ mmalone, но он вел себя случайным образом, так как иногда, когда я нажимал,
ENTER
чтобы выбрать местоположение, обработчик запускался после того, как контейнер был скрыт. Итак, вот что я в итоге сделал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>
Флаг гарантирует, что, если местоположение изменяется и пользователь нажимает клавишу ввода, событие блокируется. В конце концов, флаг устанавливается событием
false
карты Googleplace_changed
, которое затем позволяет отправить форму при нажатии клавиши ввода.источник
Вот простой код, который у меня хорошо сработал (без jquery).
Этот фрагмент кода, следуя приведенному выше коду, используется для реализации автозаполнения карт Google (с функцией клавиши Enter или без нее, о которой идет речь в этом вопросе):
selectOnEnter (названный выше в первой части кода) определил:
Этот код заставляет поле автозаполнения карт Google выбирать любой элемент, который пользователь выбирает с помощью клавиши со стрелкой вниз. Когда пользователь выбирает параметр нажатием клавиши Enter, ничего не происходит. Пользователь должен снова нажать Enter, чтобы вызвать onSubmit () или другую команду.
источник
Я подправил код Алекса, потому что он сломался в браузере. Это идеально подходит для меня:
источник
Я пробовал приведенные выше короткие ответы, но они не сработали для меня, а длинные ответы я не хотел их пробовать, поэтому я создал следующий код, который мне очень понравился. См. Демонстрацию
Предположим, это ваша форма:
Тогда следующий код javascript решит проблему:
А вот как выглядит полный код на HTML-странице (обратите внимание, что вам нужно заменить
YOUR_API_KEY
ключ API Google):источник
Используйте,
$('.pac-item:first').trigger('click');
если хотите выбрать первый результатисточник
Сделать это можно в ванили:
источник