JQuery и Google Maps автозаполнение
У меня есть Google Maps Autocomplete, работающий над несколькимиinput
теги как это:
<input class="controls pac-input" id="pac-input" type="text" onfocus="geolocate()" placeholder="Type custom address" />
Чтобы включить автозаполнение Карт Google, у меня есть следующий код:
//https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform
$(document).ready(function () {
autocomplete = new google.maps.places.Autocomplete((document.getElementById('pac-input')), { types: ['geocode'] });
google.maps.event.addListener(autocomplete, 'place_changed', function () {
MyFunc();
});
});
А потом, в MyFunc()
Функция Я делаю то, что мне нужно:
function MyFunc() {
var fullAddress = autocomplete.getPlace().formatted_address;
var input = $(this);
//stuff that uses input
}
Этот код, однако, имеет две проблемы:
- Во-первых, я использую Id, чтобы повлиять на несколько полей ввода (у меня много полей ввода). Я попытался выбрать по классу, но это не удалось с ошибкой "не определено". Как я могу применить эту функцию к коллекции полей ввода?
- Как мне узнать, какое поле нажимается? Я пытался использовать JQuery
$(this)
но это не работает. Как мне может помочь jQuery?
Заранее спасибо!
2 ответа
Вам не нужен JQuery для этого. Вот рабочий пример с использованием только javascript:
HTML:
<input class="autocomplete" id="ac1" placeholder="Enter your address" type="text"></input>
<input class="autocomplete" id="ac2" placeholder="Enter your address" type="text"></input>
<input class="autocomplete" id="ac3" placeholder="Enter your address" type="text"></input>
JavaScript:
var acInputs = document.getElementsByClassName("autocomplete");
for (var i = 0; i < acInputs.length; i++) {
var autocomplete = new google.maps.places.Autocomplete(acInputs[i]);
autocomplete.inputId = acInputs[i].id;
google.maps.event.addListener(autocomplete, 'place_changed', function () {
console.log('You used input with id ' + this.inputId);
});
}
Если вы хотите сделать это с помощью jQuery, вы можете попробовать это следующим образом:
$('.autocomplete').each(function() {
var autocomplete = new google.maps.places.Autocomplete($(this)[0]);
autocomplete.inputId = $(this).attr('id');
google.maps.event.addListener(autocomplete, 'place_changed', function () {
console.log('You used input with id ' + this.inputId);
});
});
Надеюсь это поможет.
Чтобы выяснить, какой элемент ввода вызывается, вы можете передать событие MyFunc()
, С помощью $(this)
не собирается проверять вне этой функции, чтобы увидеть, как она вызывается.
Обновите addListener
к следующему.
google.maps.event.addListener(autocomplete, 'place_changed', function (e) {
MyFunc(e);
});`
И обновить MyFunc()
в
function MyFunc(e) {
var fullAddress = autocomplete.getPlace().formatted_address;
var input = e;
//stuff that uses input
}
Вы можете использовать input
как переменная, которая содержит информацию об обновляемом элементе. Если вы делаете console.log(input);
ниже var input = e;
вы увидите список элементов, которые вы можете использовать для получения данных.
Вы можете быть наиболее заинтересованы в настройке var input = e;
в var input = e.target;
вместо. Это позволит вам легко получить информацию о входе.
Пример: input.value
вернул бы значение входного вопроса.