2013-05-08 36 views
-2

我试图加载一些div的谷歌地图图像从一个循环添加一个document.get的值。问题是getLocation()调用在循环的最后一次迭代中出现,但是随后迭代循环n次。JavaScript for循环不执行功能,直到循环结束,然后迭代函数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图像的地方。地图能够得到坐标,并且在最后或循环结束时也在下面解释了该地图持有者的值。

我认为这不是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使用警告我可以看到,在循环中的元素更新后,它才会被调用。

为什么一个函数的行为像这样,只有在循环执行完所有事情之后才能调用?

+1

请缩进您的代码。这是非常难以阅读。 – 2013-05-08 16:13:58

+2

看到“getLocation()”函数将非常有帮助。 – Pointy 2013-05-08 16:24:18

+0

@VivinPaliath会接受这个建议谢谢。 – Dean 2013-05-08 16:37:49

回答

0

正如任何人都知道,读这是有点令人困惑,可能是由于需要学习更多和JavaScript,虽然你会看到在评论中有一些很好的adivice为我学习。任何如何我的问题的解决方案:

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使用。