谷歌地图infowindow
我正在尝试为某些地图标记创建侦听器。 我可以创建标记并将它们放在地图上,但无论点击哪个标记,都会告诉我"Uncaught TypeError: Cannot call method 'open' of undefined"
。 当我打开代码时,它会显示标记[46],这是最高索引的一个标记。 而且它总是在同一个索引上点击哪个标记并不重要。
编辑 :我编辑了代码并粘贴了所有内容。 没有错误,但是当我点击标记时没有任何反应。 我正在浏览Chrome,看起来好像没有注册事件处理程序
<script>
var map;
var nav = [];
$(document).ready(function () {
//initialise a map
init();
var infowindow = new google.maps.InfoWindow({});
$.get("xxxxxx.kml", function (data) {
html = "";
//loop through placemarks tags
i = 1;
$(data).find("Placemark").each(function (index, value) {
//get coordinates and place name
coords = $(this).find("coordinates").text();
contentString = $(this).find("description").text();
var partsOfStr = coords.split(',');
var lat = parseFloat(partsOfStr[0]);
var lng = parseFloat(partsOfStr[1]);
var myLatLng = new google.maps.LatLng(lng, lat);
place = $(this).find("name").text();
createMarker(myLatLng, place, contentString, i)
//store as JSON
c = coords.split(",")
nav.push({
"place": place,
"lat": c[0],
"lng": c[1]
})
//output as a navigation
html += "<li>" + place + "</li>";
i++;
});
//output as a navigation
$(".navigation").append(html);
//bind clicks on your navigation to scroll to a placemark
$(".navigation li").bind("click", function () {
panToPoint = new google.maps.LatLng(nav[$(this).index()].lng, nav[$(this).index()].lat)
map.panTo(panToPoint);
})
});
markers = [];
function createMarker(myLatLng, title, contentString, i) {
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: title
});
google.maps.event.addListener(markers, 'click', function () {
infoWindow.setContent(contentString);
infowindow.open(map, markers[i]);
});
markers[i] = marker;
return marker
}
function init() {
//google.maps.event.addDomListener(window, 'init', Initialize);
var latlng = new google.maps.LatLng(39.047050, -77.131409);
var myOptions = {
zoom: 4,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
}
})
这几乎是一个常见问题。 当你的循环结束时,我的值是46(根据你的陈述)。 没有标记46,所以所有的点击监听失败。 它可以通过函数闭包来解决(一个createMarker函数,用于保存标记和infowindow内容之间的关联)。
在你的例子中(类似于这个),在你的标记创建循环中调用它,需要一个全局标记数组,但不需要全局infowindow数组:
//global markers array
markers = [];
// global infowindow
var infowindow = new google.maps.InfoWindow({});
// createMarker function
function createMarker(myLatLng, title, contentString, i)
{
var marker = new google.maps.Marker({
position: myLatlng ,
map: map,
title:title
});
google.maps.event.addListener(markers, 'click', function() {
infoWindow.setContent(contentString);
infowindow.open(map,markers[i]);
});
markers[i] = marker;
return marker
}
链接地址: http://www.djcxy.com/p/35857.html
下一篇: Check streetview exists when displaying it in infowindow