2016-12-03 9 views
0

Я пытаюсь установить инфоиндустрию с другим содержимым, используя for(), но это не сработает. это мой код:Google отображает проблемы с infowindows с помощью for()

var infowindow=[]; 
var myMarker=[]; 
var marker=[]; 
for (i = 0; i < dl.length; i++) { 
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]); 
    marker[i] = new google.maps.Marker({ 
    position: myMarker[i], 
    map: map 
    }); 
} 

for (var i = 0; i < dl.length; i++) { 



google.maps.event.addListener(marker[i],'mouseover', function(){ 

    infowindow[i] = new google.maps.InfoWindow({ 
    content:dl[i] 
    }); 
    infowindow[i].open(map,marker[i]); 
    }); 

    google.maps.event.addListener(marker[i],'mouseout',function() { 
    infowindow[i].close(); 
    }); 
    google.maps.event.addListener(marker[i],'click',function() { 
    alert("Y ahora te abriría otra pagina... si tuviera una"+i); 
    }); 


} 

Все крут с первым для, но когда я пытался использовать обработчик событий она идет плохо.

переменные: dl[], lt[], ln[] были инициализированы ранее.

ответ

0

Информационное окно не работает. Создайте единую копию информационного окна (вместо сохранения массива) и установите его содержимое с помощью infowindow.setContent() во время события mouseover для каждого маркера.

Edit: Ваше решение в ответе будет работать, или здесь является более кратким решением:

var myMarker=[]; 
var marker; 
var infoWindow = new google.maps.InfoWindow(); 
for (i = 0; i < dl.length; i++) { 
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]); 
    marker = new google.maps.Marker({ 
    position: myMarker[i], 
    map: map 
    }); 
    (function(msg) {marker.addListener('mouseover', function() { 
    infoWindow.setContent(msg); 
    infoWindow.open(marker.get('map'), marker); 
    }); 
    })(dl[i]); 
    marker.addListener('mouseout', function() { 
    infoWindow.close(); 
    }); 
} 
+0

Привет! Просто FYI, я видел ваше запрошенное редактирование ответа Theeternalpuzzle и проголосовало, чтобы отклонить редактирование. Вместо того, чтобы редактировать этот ответ, чтобы добавить дополнительный код, было бы лучше добавить ваш улучшенный код к собственному ответу. (И добро пожаловать в StackOverflow и спасибо за помощь своим коллегам-разработчикам!) –

0

Я endend делать это, и она работает очень хорошо

var myMarker=[]; 
var marker; 
for (i = 0; i < dl.length; i++) { 
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]); 
    marker = new google.maps.Marker({ 
    position: myMarker[i], 
    map: map 
    }); 
    attachSecretMessage(marker, dl[i]); 
} 


function attachSecretMessage(marker, secretMessage) { 
    var infowindow = new google.maps.InfoWindow({ 
    content: secretMessage 
    }); 

    marker.addListener('mouseover', function() { 
    infowindow.open(marker.get('map'), marker); 

    }); 

    marker.addListener('mouseout', function() { 
    infowindow.close(); 
    }); 

    }