2011-02-24 131 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的逻辑