Google Maps setVisible не является функцией - PullRequest
1 голос
/ 31 марта 2011

Вот мой markers[] массив:

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 не работает в этом контексте?

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

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" }
];
2 голосов
/ 31 марта 2011

Вот демоверсия JSFiddle:

Похоже, что ваши маркеры являются просто объектами вместо 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 Google Map 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 голосов
/ 31 марта 2011

Я не вижу конструктор Marker в вашем коде

new google.maps.Marker
...