2011-04-22 62 views
0
<script type="text/javascript"> 



$(document).ready(function() { initialize(); }); 

var markerarray = [ 
['Mount Evans', 39.58108, -105.63535, 4, 'This is Mount Evans.'], 
['Badlands National Park', 43.785890, -101.90175, 1, 'This is Badlands National Park'] 
]; 


var bounds = new google.maps.LatLngBounds(); 

function setMarkers(map, markers) { 

    for (var i = 0; i < markers.length; i++) { setTimeout(function() { 

     var markerarray = markers[i]; 

     var siteLatLng = new google.maps.LatLng(markerarray[1], markerarray[2]); 

     var marker = new google.maps.Marker({ 

      position: siteLatLng, 

      map: map, 

      animation: google.maps.Animation.DROP, 

      title: markerarray[0], 

      zIndex: markerarray[3], 

      html: markerarray[4] 

     }); 


     google.maps.event.addListener(marker, "click", function() { 

      $('.info').html(this.html); 

     }); 

     bounds.extend(siteLatLng); 

     map.fitBounds(bounds); 

    } , i * 2000); } 

} 


    function initialize() { 

    var myOptions = { 

     disableDefaultUI: true, 

     mapTypeId: google.maps.MapTypeId.ROADMAP 

    } 

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    setMarkers(map, markerarray); 

} 

簡單的JavaScript的setTimeout問題

當我使用setTimeout(function() {...我得到一個JavaScript錯誤: 「markerarray是不確定的」。但是,當我刪除超時一切工作,因爲它應該。但是當我們將它們添加到地圖時,我希望在每個標記之間有一段延遲。我錯過了什麼?由於

+0

markerarray是外部和內部的函數聲明,是嗎? – morgar 2011-04-22 23:22:02

+0

它在函數外聲明。 – fille 2011-04-22 23:24:14

+0

好吧,但它再次聲明>> var markerarray = markers [i]; – morgar 2011-04-22 23:25:23

回答

0

我會嘗試和移動MarkerArray定義的第一行,什麼

+0

這將如何幫助? – fille 2011-04-22 23:24:56

+0

當Document.Ready命中時,可能無法初始化該數組。我通常在頁面末尾使用$(function(){...})語句來確保所有內容都真正加載完畢。 – Dimitri 2011-04-22 23:32:59

3

之前,這花了一點搞清楚的,但它是如果有人能抓到一個非常好的例子。問題在於i而不是markerarray。因此

通過該setTimeout火災(2秒鐘後)for循環已完成,i被設置爲2 markers[i]的時間markers[2],它不存在,等等markerarray(或markerarray2,爲了清楚,在我例如)設置爲undefined

解決方法是在下面的示例中設置另一個變量c。該變量充當您的計數器,因此定義markerarray2是因爲定義了markers[c]

var markerarray = [ 
['Mount Evans', 39.58108, -105.63535, 4, 'This is Mount Evans.'], 
['Badlands National Park', 43.785890, -101.90175, 1, 'This is Badlands National Park'] 
]; 

function setMarkers(markers) { 
    var c = 0; 
    for (var i = 0; i < markers.length; i++) { setTimeout(function() { 
      var markerarray2 = markers[c]; 
      c++; 
      alert(markerarray2[0]); 
     }, i * 1000); 
    } 
} 

setMarkers(markerarray);