Javascript for循环直到循环结束才执行函数,然后迭代函数n次
javascript for loop not executing function until end of loop, then iterating function n number of times
我试图加载一些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()使用longInput和latInput值作为lat和lon变量,并使用theMapholder作为放置目标div图像的位置。映射可以获得坐标,并且正如下面在循环的最后或末尾所解释的,也可以获得theMapholder的值。
我认为这不是getLocation()的问题,更多的是我如何尝试使用它。通过在getLocation()调用中添加警报并查看屏幕上的元素,我知道了这一点元素通过循环填充并更改,然后在此发生后调用n次get location。然后getLocation()只拾取在给定元素值的迭代完成时设置的值。
在循环开始时添加警告使循环循环n次,然后只执行一次getLocation()。
总结一下:循环并逐个更改元素值。完成后,调用getLocation(),迭代次数相同。getLocation()现在只能访问元素的最终设置,所以只给一个div一个map。
院长更新:很抱歉给出了不正确的信息:似乎我的循环中的任何方法调用都会导致相同的行为:
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次警报,然后执行pulse ?很抱歉造成混乱。
院长更新:Google maps脚本:
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中的alert,我可以看到它只在循环更新元素后被调用。
为什么a函数会表现得像这样,并且只在循环执行了其他所有内容之后才调用?
任何人都知道,读这是有点混乱,可能是由于需要学习更多和javascript,尽管你会看到在评论中有一些很好的建议,从我学习。我对这个问题的解决方法是:
在循环完成对所有其他代码的迭代之后,getLocation()被迭代。因此,作为一种技巧,当getLocation()方法迭代时,这是函数可以使用的更改元素值的时间:
var y=1;
var x=document.getElementById("demo");
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
function showPosition(position)
{
var longitude = -1.8612393999999999;
var latitude = 50.7263312;
document.getElementById("longInput").value = longitude;
document.getElementById("latInput").value = latitude;
var mapholder = "mapholderM"+y;
document.getElementById("mapholderValue").value = mapholder;
theMapholder=document.getElementById(mapholder);
lat= $("#latInput").val();
lon= $("#longInput").val();
latlon=new google.maps.LatLng(lat, lon);
mapholder=theMapholder;
alert("getLocation " + theMapholder+y);
y++;
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!"});
}
注意,这里引入了变量y,每次调用该方法时,它的值都会增加,以便在get元素id中使用。
- Chrome/jQuery未捕获范围错误:超过了最大调用堆栈大小(函数循环)
- 如何在返回值(Js)时不中断函数/循环
- 函数在自己的循环中使用 i,以及一个子函数循环 - var 的行为类似于 let
- 我可以在 jquery 中对函数循环使用相同的返回值吗?
- 如何使用 each() 函数循环访问 JSON 文件
- jQuery函数循环两次
- setInterval 函数循环太快
- 简化我的函数(循环、数组)
- 我的 IF 条件如何影响全局变量使函数循环
- 使用ReactJS和concatJSX语法进行渲染时的map函数循环
- 如何通过OnClick函数循环遍历标记元素并在显示器上获得相应的内容
- 函数循环问题
- 将计数器添加到javascript函数循环中
- 通过future函数循环和设置全局变量
- jQuery创建一个函数循环,每个函数都有一个动画队列
- 从另一个函数终止一个活动的javascript函数/循环
- jQuery函数循环:为什么夏奇拉在陌生人吻她时重复吻
- 在一个简单的函数循环中设置style.display时出现了奇怪的行为
- 通过多个函数循环/setinterval
- 试图防止Jquery函数循环