2011-03-17 9 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

그게 내가 찾고 있었고 그것에 대해 생각했지만 시도해 보지 않았다! 감사. –

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 (마커, '클릭', function (event, obj) {...}) 여기서 "obj"는 그 사건. –

+0

폐쇄가 당신에게 그것을 제공하기 때문에 나는 추측한다. 클릭 이벤트 콜백에서 마커에 액세스 할 수 있습니다. (업데이트 된 답변) – RedBlueThing

0

API로 어떻게 제공 되는가? 당신이 설명하는 것은 해킹입니다. 마커를 클릭하면 위도가 & lng 인 이벤트가 전달됩니다.

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

아니요, 제가 설명한 것은 전혀 해킹이 아니 었습니다 - 업데이트 된 질문을 참조하십시오. 아마도 명확하지 않았습니다. 의견을 보내 주셔서 감사합니다. –

관련 문제