2010-01-11 7 views
1

마커의 정보 창을 닫을 수 없습니다. 나는 어떤 생각을 드러내고 있습니까? 당신의 도움이InfoWindow는 Google지도 API를 닫으 려하지 않습니다 V3

function mapClick(event) { 

     createLocationMarker(event.latLng); 

} 
function createLocationMarker(location) { 
    var clickedLocation = new google.maps.LatLng(location) 
    var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true}); 

    gMap2.setCenter(location); 
    displayMarkerPosition(gMarker); 

    google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow); 
    google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); }); 
} 

function closeMapInfoWindow() {infowindow.close(); } 

function displayMarkerPosition(gMarker) { 
    var message = "my message"; 
    var infowindow = new google.maps.InfoWindow(
    { content : message, 
    }); 

    infowindow.open(gMap2,gMarker); 
} 

답변

3

에 대한 덕분에 예, 개인 범위 infowindow 정의하지만 그 범위 외부에서 액세스 할 수 있습니다.

var infowindow; 

을 그리고 당신의 생성자 줄에서 'var에'를 제거 : 스크립트의 시작 부분이 추가 (샘플)에서

infowindow = new google.maps.InfoWindow(

완성 된 코드 look like this 것입니다.

조금 더 배경

당신이 var의 변수를 정의, 그것은 그 범위에 연결되어 있습니다. 함수에 정의하면 해당 함수와 함수에 정의 된 다른 함수 만 변수에 액세스 할 수 있습니다. 이를 전달하는 다른 방법은 함수의 매개 변수로 사용하는 것입니다.

업데이트 여러 정보 창의를 용이하게하기 위해이 작업을 수행합니다. 유의할 점은 원래 var 선언으로 되돌아 가서 그 기능으로 범위를 유지한다는 것입니다. 그런 다음 객체에 대한 참조를 나중에 사용하기 위해 반환합니다.

function mapClick(event) { 
    createLocationMarker(event.latLng); 
} 
function createLocationMarker(location) { 
    var clickedLocation = new google.maps.LatLng(location) 
    var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true}); 

    gMap2.setCenter(location); 
    // Store reference to info window 
    var info = displayMarkerPosition(gMarker); 

    google.maps.event.addListener(gMarker, "dragstart", function(){ info.close }); 
    google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); }); 
} 

function displayMarkerPosition(gMarker) { 
    var message = "my message"; 
    var infowindow = new google.maps.InfoWindow(
     { content : message } 
    ); 

    infowindow.open(gMap2,gMarker); 
    return infowindow; // Return the reference to the infowindow 
} 
+0

Rapide, clair et précis! Merci beaucoup Doug :) – Shipow

+0

@Shipow Avec plaisir <- 나는 단지 영어로 말하기 때문에 웃을 수 없다면 "내 즐거움"을 의미하기를 바랍니다. –

+0

"전달할 다른 방법은 함수의 매개 변수로 사용하는 것뿐입니다." 하나 이상의 마커를 갖고 싶기 때문에 정의 된 여러 정보 창이 있습니다. 인스턴스에 액세스하기 위해 매개 변수를 사용해야하는 곳은 어디입니까? 시간 내 – Shipow