我有一个问题是将infoWindow添加到FOR循环生成的标记中。 我想为每个标记生成一个infoWindow。 我看到只添加了最后一个infoWindow,即使我把它放到其他标记上,这个infoWindow会显示在最后一个标记see screenshot
这是我创建标记和infowindows的循环:
for (var i in data) {
var rssi = data[i].rssi;
var marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(data[i].lat, data[i].lng),
title: data[i].rssi,
clickable: true
});
marker.info = new google.maps.InfoWindow({
content: 'This is the marker:'+i
});
google.maps.event.addListener(marker, 'click', function() {
marker.info.open(map, marker);
});
markers.push(marker);
}
答案 0 :(得分:0)
我认为你应该在给定的索引上打开i
,否则它总是被引用到最后一个循环项。因此,在点击事件中,您应该在给定的google.maps.event.addListener(marker, 'click', function() {
marker.info.open(map, marker[i]);
});
infoWindow
我猜如果您点击其他标记,那么您将有两个开放currentOpen
。如果您希望始终打开一个,您可以存储$conditions = $rule->conditions();
foreach ($conditions as $condition) {
$rule_sku_ids = $condition->condition->sku_id;
}
索引并在打开新索引之前将其关闭。
答案 1 :(得分:0)
实际上问题在于
marker.info.open(map, marker);
应该是
marker.info.open(map, this);
答案 2 :(得分:0)
你需要找到当前的标记,然后从中获取信息对象。这个:
使用:
google.maps.event.addListener(marker, 'click', function() {
this.info.open(map,this );
});
<script src="http://maps.google.com/maps/api/js?v=3.9&sensor=false"></script>
<script>
var markers=[];
function plotmap(){
var gm = google.maps;
var map = new gm.Map(document.getElementById('map_canvas'), {
mapTypeId: gm.MapTypeId.SATELLITE,
center: new gm.LatLng(17.00,78.43), zoom: 10
});
var data=[{'rssi':"fgfghfgh",'lat':"17.43",'lng':"78.43"},{'rssi':"new one",'lat':"17.49",'lng':"78.53"}];
for (var i in data) {
var rssi = data[i].rssi;
var marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(data[i].lat, data[i].lng),
title: data[i].rssi,
clickable: true
});
marker.info = new google.maps.InfoWindow({
content: 'This is the marker:'+i
});
google.maps.event.addListener(marker, 'click', function() {
this.info.open(map,this );
});
markers.push(marker);
}
}
</script>
<div id="map_canvas" style="width:600px;height:500px;"></div>
<script>
plotmap();
</script>
&#13;