2011-07-11 30 views
-1

我已經創建了一堆標記和信息框,我想通過一個監聽器連接在一起,儘管監聽器似乎在開始時沒有任何點擊而觸發,並且如果我嘗試啓動聽衆點擊標記(在關閉盒子後)什麼都沒有發生。谷歌地圖API V3,聽衆行爲奇怪

//Load Markers 
function LoadData() { 
    //Space Reservation 
    var site_arr = new Array(); 
    var point_arr = new Array(); 
    var pasta_arr = new Array(); 
    //Load All Information 
    point_arr = [new google.maps.LatLng(38.629343,-9.191592), 
       new google.maps.LatLng(38.649187,-9.189205)]; 

    site_arr = ["AAA","BBB"]; 

    pasta_arr = [1,2]; 

    //Create Markers and Set InfoBoxes 
    for(var i = 0 ; i < site_arr.length ; i++){ 
     marker_arr[i] = new google.maps.Marker({ 
       position: point_arr[i] 
       ,map: map 
       ,title: site_arr[i] 
       }); 

      window_arr[i] = new InfoBox({ 
      content: site_arr[i] 
      }); 
      google.maps.event.addListener(marker_arr[i], 'click', function(i){ 
      window_arr[i].open(map,marker_arr[i]); 
      }(i)); 
      } 
    return 0; 
} 

任何人都知道發生了什麼?

解決了這個問題,我只是發佈它,因爲它可能對別人有用... 謝謝大家!

//加載標記 功能LoadData(){// 空間預留 變種site_arr =新的Array(); var point_arr = new Array(); var pasta_arr = new Array(); //加載所有信息 point_arr = [new google.maps.LatLng(38.629343,-9.191592), new google.maps.LatLng(38.649187,-9.189205)];

site_arr = ["AAA", 
      "BBB"]; 

pasta_arr = [1,2]; 

//Create Markers and Set InfoBoxes 
for(i = 0 ; i < site_arr.length ; i++){ 
    marker_arr[i] = new google.maps.Marker({ 
     position: point_arr[i] 
     ,map: map 
     ,title: site_arr[i] 
     ,icon: "http://labs.google.com/ridefinder/images/mm_20_red.png" 
    }); 

    marker_arr[i]._info = new InfoBox({ 
     content: pasta_arr[i]; 
    }); 
    attachListener(marker_arr[i]); 
} 
return 0; 

}

功能attachListener(標記){ google.maps.event.addListener(標記, '點擊',函數(){ marker._info.open(地圖,標記物); }); return 0; }

回答

0

您不是將函數添加到您的偵聽器,而是函數值。您顯示信息窗口是因爲您在LoadData()期間評估了聽衆的function(i)i。第二個問題是,即使您刪除了評估,您在調用偵聽器期間也不會獲得預期的索引i。正確的方法是這樣的:

marker_arr[i]._info = window_arr[i]; 
google.maps.event.addListener(marker_arr[i], 'click', function() { 
    var marker = this; 
    marker._info.open(map, marker); 
}); 
+0

我現在做明白爲什麼聽者在其自身的射擊,但還是你的建議不會工作,現在無論是顯示與信息被點擊的信息框標記最後一個標記,並在最後一個標記位置! – user838681

+0

我的第一個回答是一個建議。我現在改進了它,使它完全正常工作。 – Jiri