谷歌地图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

上一篇: Google maps infowindow

下一篇: Check streetview exists when displaying it in infowindow