谷歌地图监听器关闭

时间:2014-01-03 10:00:04

标签: javascript google-maps

我试图通过循环对象数组并创建标记然后检查对象是否具有内容属性来添加信息窗口到标记,如果是,则在标记上添加事件监听器打开一个信息窗口。

我几乎在那里,但在循环中遇到了与闭包相关的问题。我总是最终得到数组的content属性中的最后一个对象。我以为我可以通过在函数中包装事件监听器回调并传入对象

来解决这个问题

在分配事件监听器时,任何人都可以告诉我我的闭包错误:

_addMarkers = function () {
    var marker, latlon, title, infowindow, content;

    _options.markers.map(function (marker) {

        title   = marker.title;
        content = marker && marker.window_content;
        latlon  = _getLatLon(marker.lat, marker.lon);

        if (latlon) {
            marker = new google.maps.Marker({
                position : latlon,
                title    : title,
                map      : _map
            });
        }


        if (content) {
            infowindow = new google.maps.InfoWindow({
                content: content
            });                        

            google.maps.event.addListener(marker, 'click', (function (_marker) { 
                infowindow.open(_map, _marker);
            }(marker)));
        }

    });
} 

1 个答案:

答案 0 :(得分:0)

修正了它。将添加侦听器的位更改为:

if (content) {
    google.maps.event.addListener(marker, 'click', (function (content, _marker) { 
        return function () {
            infowindow = new google.maps.InfoWindow({
                content: content
            });                        
            infowindow.open(_map, _marker);                        
        };
    }(content, marker)));
}