Как сказать, когда предложение google не задано автозаполнением?
Краткая версия:
Я использую автозаполнения google из библиотеки Google Places (здесь https://developers.google.com/maps/documentation/javascript/places), и мне нужно указать, когда пользователь выбрал место из авто -полный список и когда они щелкнули в другом месте, внесли вкладки и т.д.
Моя цель - запустить функцию, когда пользователь взаимодействует с элементом ввода, но не выбирает вариант автозаполнения.
Подробнее:
При просмотре документации появляется одно событие, когда (действительно, если) места меняются, что происходит после (потенциально длинного) маршрута в оба конца. Если пользователь ничего не выбирает из списка, это событие никогда не запускается. (Документы в https://developers.google.com/maps/documentation/javascript/reference?hl=fr#Autocomplete)
Я могу прикрепить прослушиватель к событию размытия для входного элемента, к которому присоединяется автозаполнение, но проблема в том, что событие размытия происходит задолго до события places_changed.
До сих пор пробовали ряд вещей, включая прослушивание событий в предложениях автозаполнения с помощью следующего:
$('body').on('click', '.pac-item', function(){alert.log('yay!');});
библиотека google, по-видимому, ест события.
Любая помощь будет принята с благодарностью.
Спасибо!
Ответы
Ответ 1
Вместо того, чтобы использовать событие для проверки, вы должны проверить, отправляется ли форма. Здесь это шаг за шагом:
- Когда пользователь выбирает место, сохраните место И текстовое значение ввода
- Когда форма отправляется, проверьте, совпадает ли значение ввода с сохраненным вами
- Если он отличается или нет места, сохраненного, затем выполните запрос ручных мест
Демо: http://jsfiddle.net/robertdodd/FSRd8/7/
Я собрал небольшую демонстрацию выше. То, что я сделал, - это приложить метод проверки к форме. Этот метод проверяет данные перед отправкой формы и, если требуется, сначала выполняет поиск вручную.
function validateForm() {
searchfield = $('#searchfield').val();
if (searchfield == "" || searchfield == null) {
// No text entered
} else if (place && searchfield == placesearch) {
// Success
return true;
} else {
// place info and search text do not match, perform manual lookup
// when lookup is complete, the callback function will store the place info
// and resubmit the form
}
return false;
}
Это всего лишь контур того, что происходит, весь код находится в демо, если вы хотите его увидеть.
Надеюсь, это поможет вам!