我正在尝试从一个循环中加载一些带有谷歌地图图像的 div,该循环将一个添加到 document.get 的值。问题是 getLocation() 调用出现在循环的最后一次迭代中,但随后将循环迭代 n 次。
for(var i = 1; i < length; i++){
var longitude = 1.8612393999999999;
var latitude = 50.7263312;
document.getElementById("longInput").value = longitude;
document.getElementById("latInput").value = latitude;
var mapholder = "mapholderM"+i;
document.getElementById("mapholderValue").value = mapholder;
theMapholder=document.getElementById(mapholder);
getLocation();
}
getLocation() 对 lat 和 lon 变量使用 longInput 和 latInput 值,并将 Mapholder 作为放置目标 div 图像的位置。地图能够获得坐标,并且如下所述,在循环的最终或结束时,还有 theMapholder 值。
我认为这不是 getLocation() 的问题,更多的是我尝试使用它的方式。通过在 getLocation() 调用中添加警报并在屏幕上查看元素,我知道元素是通过循环填充并更改的,然后在发生这种情况后调用了 n 次获取位置。然后 getLocation() 只获取在给定元素值的迭代完成时设置的值。
在循环的开头添加一个警报会使循环循环 n 次,然后只执行一次 getLocation()。
总结一下:一一循环和更改元素值。一旦完成,就会调用 getLocation(),并使用相同的迭代次数。getLocation() 现在只能访问元素的最终设置,因此只给一个 div 一个地图。
院长
更新:很抱歉提供了不正确的信息:我的循环中的任何方法调用都会导致相同的行为:
function pulse(){
$('#contentDiv').delay(200).fadeOut('slow').delay(50).fadeIn('slow');
}
从我的循环中调用此方法:
for(var i = 1; i < length; i++) {
var longitude = 1.8612393999999999;
var latitude = 50.7263312;
alert("end of loop");
pulse();
}
导致警报 n 次,然后执行脉冲?很抱歉造成混乱。
院长
更新:谷歌地图脚本:
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
function showPosition(position)
{
alert($("#longInput").val()); */
lat= $("#latInput").val();
lon= $("#longInput").val();
latlon=new google.maps.LatLng(lat, lon);
mapholder=theMapholder;
alert("getLocation " + theMapholder);
var myOptions={
center:latlon,zoom:14,
mapTypeId:google.maps.MapTypeId.ROADMAP,
mapTypeControl:false,
navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
};
var map=new google.maps.Map(theMapholder,myOptions);
var marker=new google.maps.Marker({position:latlon,map:map,title:"You are here!"});
}
function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
x.innerHTML="User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML="The request to get user location timed out."
break;
case error.UNKNOWN_ERROR:
x.innerHTML="An unknown error occurred."
break;
}
}
</script>
使用 showPosition 中的警报,我可以看到它仅在循环更新元素后才被调用。
为什么 a 函数的行为会像这样,并且仅在循环执行完其他所有操作后才被调用?