2011-03-31 95 views
1

这里是我的markers[]数组:谷歌地图调用setVisible不是一个函数

partnerMarkers = [ 
     // London 
     { lat: 51.515482718, lng: -0.142903122, name: "London", content: "Our home town and international hub." }, 
// Dubai 
     { lat: 25.2644444, lng: 55.3116667, name: "Middle East", content: "Dubai desc" } 
]; 

我有这个功能,通过标记列阵(通过按钮别处触发)循环:

function toggle_layer(markers) { 
    for (var i=0; i<markers.length; i++) { 
     markers[i].setVisible(false); 
    } 
} 

我得到markers[i].setVisible is not a function - 但然后这工作正常:

function toggle_layer(markers) { 
    for (var i=0; i<markers.length; i++) { 
     console.log(markers[i]); 
    } 
} 

为什么setVisible没有在这方面工作?

+0

什么样的对象是标志? – 2011-03-31 12:10:40

+0

@NiklasRingdahl它是一个数组。 – strangerpixel 2011-03-31 12:26:10

+0

是的,但一个什么样的数组?我想它应该是Marker,你能提供标记对象设置时的代码吗? – 2011-03-31 12:28:46

回答

2

这里是JSFiddle Demo:

好像你的标志只是对象,而不是google.maps.Markers,因此它不具有内它setVisible()功能。您基本上想要将对象内的数据转换为google.maps.Marker对象。我创建了一个全局数组gooMarker来保存标记。通过点击地图下方的链接,它会隐藏标记。下面是创建标记,然后隐藏它们的方式:

HTML标记:

<div id='parent'> 
    <div id="map_canvas" style="width: 650px; height: 550px;"></div> 
</div> 
<div id='hidemark'>Click to hide markers</div> 

的JavaScript +谷歌地图API V3:

var map; 
var gooMarker = []; 

var partnerMarkers = [ 
    { 
    lat: 51.515482718, 
    lng: -0.142903122, 
    name: "London", 
    content: "Our home town and international hub."}, 
    { 
    lat: 25.2644444, 
    lng: 55.3116667, 
    name: "Middle East", 
    content: "Dubai desc"} 
]; 

function initialize() { 

    var london = new google.maps.LatLng(51.5, 0); 

    var myOptions = { 
     backgroundColor: '#FFFFF', 
     zoom: 2, 
     center: london, 
     navigationControl: true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map_canvas = document.getElementById("map_canvas"); 

    map = new google.maps.Map(map_canvas, myOptions); 

    for (var i = 0; i < partnerMarkers.length; i++) { 
     gooMarker.push(new google.maps.Marker({ 
      position: new google.maps.LatLng(partnerMarkers[i].lat, partnerMarkers[i].lng), 
      map: map, 
      title: partnerMarkers[i].name 
     })); 
    } 
} 

function hideMarkers(){ 
    for(var i=0; i<gooMarker.length; i++){ 
     gooMarker[i].setVisible(false); 
    } 
} 

document.getElementById('hidemark').onclick = hideMarkers; 

window.onload = initialize; 
+0

谢谢 - 将标记推入gooMarker阵列是关键。 – strangerpixel 2011-03-31 17:27:02

0

我没有看到在标记构造你的代码

new google.maps.Marker 
1

kjy112是当场,简化直接向插件到您的代码:

partnerMarkers = [ 
// London 
    new google.maps.Marker(
    { position: new google.maps.LatLng(51.515482718, -0.142903122), 
    title: "London - Our home town and international hub." }, 
// Dubai 
    new google.maps.Marker(
    { position: new google.maps.LatLng(25.2644444, 55.3116667), 
    title: "Middle East - Dubai desc" } 
]; 
+0

+1简化@Niklas – kjy112 2011-03-31 15:24:44

相关问题