Я пытаюсь динамически генерировать карту Google, когда пользователь отправляет форму, но карта не появляется в своем div при отправке формы.Вставить карту Google в динамически созданный div
Я тестировал, будет ли карта заполняться только на pageload, и это происходит, но при попытке использовать div, отображающий onclick, карта не отображается.
<form onsubmit="return false" action="">
<input type="text" id="addLocation"/>
<button onclick="findLocation()" id="btnLocation">Find Location</button>
</form>
<div id="mapContainer"></div>
Это JavaScript:
function findLocation(){
var inputString = $('#addLocation').val();
$('#mapContainer').html('<div id="mapCanvas"></div>');
var apiRequest = $.ajax({
url: 'http://xxxxx.net/json/'+ inputString,
dataType: 'json',
type: 'get',
});
apiRequest.done(function(data){
var lat = data['latitude'];
var lng = data['longitude'];
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(lat, lng),
zoom: 8
};
map = new google.maps.Map(document.getElementById('mapCanvas'), mapOptions);
}
// from GMaps API docs
function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp' + '&callback=initialize';
document.body.appendChild(script);
}
window.onload = loadScript;
}); // ends .done statement
} // ends findLocation
Это должно быть то, что при нажатии на кнопку Find Расположение будет генерировать карту в mapCanvas DIV, но это не так.
Я узнал from the Google Maps API documentation, что если вы хотите асинхронно загружать карту, вы должны использовать эту функцию loadScript.
И да, карты divs имеют ширины и высоты в CSS, так что это не проблема. Я думаю, проблема связана с областями Javascript. Я делаю что-то неправильно с порядком или размещением звонков, просто не знаю, что.
Возможно, вы имеете право на область видимости. Обратный вызов будет проходить в области окна, и он не сможет найти вашу функцию. Попробуйте установить 'window.initialize = initialize' и посмотреть, вызывает ли это карту OK. – sifriday
Была хорошая идея, но я боюсь, что вызывать инициализацию не сделали. – PanicBus
Также вам не хватает 'center:' в вашем mapOptions ... – sifriday