2011-03-17 44 views
3

第一次使用Google Maps API v3,我有一張地圖上有一堆標記。我想這樣做,當你點擊一個,一個特定的InfoWindow將顯示(特定於你點擊的標記)。我真的很驚訝,點擊事件並沒有告訴你點擊的實際標記!Google Maps API v3 - 爲什麼沒有事件的上下文?

我知道有一個解決方案使用單獨的方法來創建一個閉包,但對我來說這似乎是一個黑客。有沒有更好的方法來做到這一點?或者,有沒有辦法問問地圖「這個位置存在什麼標記」,並從事件論證中傳遞出位置?

我預料之中的事件像這樣的工作:

google.maps.event.addListener(marker, 'click', function(event, obj) 
{ 
    //Now I can work with "obj" - the thing that was clicked. 
}); 

回答

10

你應該在事件監聽器中引用'this'。

google.maps.event.addListener(marker, 'click', function(e) { 
    // this == marker; 
    // e == MouseEvent 
}); 
+0

這就是我正在尋找的東西,我想過它,但沒有打擾嘗試它!謝謝。 – 2011-03-17 01:54:48

0

我認爲這將是一個錯誤,試圖追捕基於點擊事件的位置標記對象。使用閉包將事件與特定標記關聯起來似乎對我來說是一個有效的解決方案。我會創建一個如下所示的函數:

function createMarker (point, map) 
{ 
    var marker = new google.maps.Marker({ 
      position: point, 
      map: map, 
      title: "blah"}); 

    marker.stuffOnTheMarker = "Some interesting stuff"; 

    var content = buildSomeContentForThisMarker(); 

    google.maps.event.addListener(marker, 'click', function() { 
      infowindow.close(); 
      infowindow.setContent(content); 
      infowindow.open(map,marker); 

      // access the marker than caused this event 
      alert (marker.stuffOnTheMarker); 
     }); 
} 
+0

好的,這似乎是我猜測的唯一方法,但它確實感覺髒。我想知道他們爲什麼沒有實現他們的事件,所以你可以這樣做:google.maps.event.addListener(marker,'click',function(event,obj){...})其中「obj」是引起的事情事件。 – 2011-03-17 01:18:48

+0

我想因爲閉包給你。您可以從點擊事件回調中訪問標記。 (更新後的答案) – RedBlueThing 2011-03-17 01:25:37

0

當它由API提供時,它是如何被破解的?你所描述的是一種黑客攻擊。當你點擊標記時,它將傳遞一個包含經緯度的事件。

google.maps.event.addListener(marker, 'click', function(e) { 
    console.log(e); // { x: 0, y: 0 } 
}); 
+0

不,我描述的根本不是破解 - 請參閱我更新的問題,也許我不清楚。感謝您的意見。 – 2011-03-17 01:53:26

相關問題