【发布时间】:2020-07-12 04:54:40
【问题描述】:
我正在尝试创建一个单页地图生成器,他们可以在其中输入地址和邮政编码。
这部分有效
Geolocation API 然后进行反向查找以获取经度和纬度,并将其填充到 2 个隐藏的输入字段以供以后使用。
这部分不起作用
然后,我需要使用 Maps API 从隐藏的输入中获取经度和纬度值并生成地图,但是,变量为 NULL,因为它们设置在点击时激活的函数中。
我需要能够在设置值后触发地图生成器代码,或者最初从一组图形传递一组值,然后单击按钮使用隐藏值重新运行代码。
<script>
var apiKey='REMOVED FOR PRIVACY';
var longitude, latitude, map;
jQuery(document).ready(function( $ ) {
$('#find-address').click(function () {
var address = $('#address').val();
var postcode = $('#postcode').val();
var addressClean = address.replace(/\s+/g, '+');
var postcodeClean = postcode.replace(/\s+/g, '+');
var apiCall = 'https://maps.googleapis.com/maps/api/geocode/json?address='+addressClean+',+'+postcodeClean+'&key='+apiKey+'';
$.getJSON(apiCall,function (data, textStatus) {
longitude = data.results[0].geometry.location.lng;
latitude = data.results[0].geometry.location.lat;
document.getElementById("long").value = longitude;
document.getElementById("lat").value = latitude;
});
setTimeout(function(){
longitude = $("input#long").val();
latitude = $("input#lat").val();
if(longitude && latitude){
longitude = parseFloat(longitude);
latitude = parseFloat(latitude);
initMap(longitude,latitude);
}
}, 1000);
});
});
function initMap(longitude,latitude) {
var myLatlng = new google.maps.LatLng(latitude,longitude);
var mapOptions = {
zoom: 12,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map-embed-div"), mapOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
draggable: true,
title: "Where's your garden?"
});
};
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=REMOVED_FOR_PRIVACY&callback=initMap" async defer></script>
我尝试在 setTimeout 函数中调用该函数并在函数回调中传递值,但是这会返回 NULL。
在 timeout 函数中移动所有内容会引发未定义 initMap 的 promise 错误。
HTML 表单
<form action="/instant-quote-test/#wpcf7-f3686-p3924-o1" method="post" class="wpcf7-form mailchimp-ext-0.5.14" novalidate="novalidate">
<div style="display: none;">
<input type="hidden" name="_wpcf7" value="3686" /><br />
<input type="hidden" name="_wpcf7_version" value="5.1.7" /><br />
<input type="hidden" name="_wpcf7_locale" value="en_GB" /><br />
<input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f3686-p3924-o1" /><br />
<input type="hidden" name="_wpcf7_container_post" value="3924" />
</div>
<p><span class="wpcf7-form-control-wrap your-fname"><input type="hidden" name="your-fname" value="" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false" /></span><span class="wpcf7-form-control-wrap your-email"><input type="hidden" name="your-email" value="" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false" /></span><span class="wpcf7-form-control-wrap your-phone"><input type="hidden" name="your-phone" value="" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false" /></span></p>
<input type="text" name="street-address" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" id="address" aria-required="true" aria-invalid="false" placeholder="Street Address" />
<input type="text" name="post-code" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" id="postcode" aria-required="true" aria-invalid="false" placeholder="Post Code" />
<input type="hidden" id="lat" value=""><input type="hidden" id="long" value="">
<input type="hidden" name="addressField1" value=""><input type="hidden" name="postcodeField" value="">
<a href="#" id="find-address" title="Find Address" class="button">Find Address</a>
<div id="map-embed">
<div id="map-embed-div" style="height:400px;width:100%;"></div>
</div>
<div id="after-map-quote">
<input type="submit" value="Get My Lawn Care Quote" class="wpcf7-form-control wpcf7-submit quote-send" />
</div>
</form>
【问题讨论】:
标签: javascript google-maps google-maps-api-3 google-maps-api-2