2011-02-24 196 views
5

我有以下代碼,但它不工作,鏈接只顯示在最後一點(阿根廷),有幫助嗎?谷歌地圖標記作爲鏈接

<div id="map" style="width: 980px; height: 420px;margin:10px 0px 30px;"></div> 

<script type="text/javascript"> 
    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 2, 
     center: new google.maps.LatLng(0,0), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    var usa = new google.maps.LatLng(37.09024, -95.712891); 
    var brasil = new google.maps.LatLng(-14.235004, -51.92528); 
    var argentina = new google.maps.LatLng(-38.416097, -63.616672); 

    var marker = new google.maps.Marker({ 
     position: usa, 
     url: '/destinos/exibir/pais_id/3', 
     title: 'Estados Unidos', 
     map: map 
    }); 

    var marker = new google.maps.Marker({ 
     position: brasil, 
     url: '/destinos/exibir/pais_id/2', 
     title: 'Brasil', 
     map: map 
    }); 

    var marker = new google.maps.Marker({ 
     position: argentina, 
     url: '/destinos/exibir/pais_id/1', 
     title: 'Argentina', 
     map: map 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     window.location.href = marker.url; 
    }); 

    </script> 

回答

11

jsfiddle演示與修改增廣@hsz例如:

的問題是你必須標記申報3次,僅附加點擊該聲明最後一個事件。因此,您必須爲3個不同的標記聲明3個不同的名稱,並使用onclick事件附加每個標記。更好,如果你這樣做在一個數組或東西

var markers = []; 

markers[0] = new google.maps.Marker({ 
    position: usa, 
    url: '/destinos/exibir/pais_id/3', 
    title: 'Estados Unidos', 
    map: map 
}); 

markers[1] = new google.maps.Marker({ 
    position: brasil, 
    url: '/destinos/exibir/pais_id/2', 
    title: 'Brasil', 
    map: map 
}); 

markers[2] = new google.maps.Marker({ 
    position: argentina, 
    url: '/destinos/exibir/pais_id/1', 
    title: 'Argentina', 
    map: map 
}); 

for (i = 0; i < markers.length; i++) { 
    google.maps.event.addListener(markers[i], 'click', function() { 
     window.location.href = this.url; //changed from markers[i] to this 
    }); 
} 
+3

我必須將'this [i]'更改爲'this'才能使其工作。 – dlras2 2012-07-10 18:16:18

4

你給每個標記相同的變量名稱,所以我認爲引用'marker'只會指向最後一個(阿根廷)。

您可以嘗試給他們分開的名稱,並將偵聽器分別綁定到每個名稱。

+0

對不起,如果不使用數組,可以詳細說明如何聲明標記?我正在使用該數組,只有最後一個值被返回,點擊你所說的標記。 – Joe 2011-05-12 14:28:49

+0

對不起,發現將創建部分傳遞給另一個函數的方法解決了它:) – Joe 2011-05-12 15:30:35

3

剛加入這個答案的人將來參考,如果他們需要它

發送信息到另一個createMarker功能

createMarker(pos,title,weburl) 
{ 
marker = new google.maps.Marker({ 
position: pos, 
title: title, 
map: map 
}); 
google.maps.event.addListener(marker, 'click', function() { 
    window.location.href = weburl; 
}); 
} 

感謝湯姆Elliott爲了指出這個問題,我正在使用類似於kjy112的邏輯