jQuery.each会覆盖帖子

时间:2015-07-17 14:56:36

标签: jquery google-maps-api-3 each google-geocoder

我在Pimcore后端使用地址。地址转到地址解析器,用于从地址中获取lat和lon。在此之后,lon和lat存储在后端(Pimcore)中。这非常有效。

下一步是提供所有地址,以便它们显示在前端的地图上。设置标记并显示POI的地址。我实现了一个滚动到地图的链接,将缩放设置为16并以POI为中心。

我的问题是,只显示最后一个POI,无论我点击什么地址链接(它滚动到地图并放大......但总是显示最后一个poi)。这让我觉得我jQuery.each以某种方式覆盖了所有的点,所以只留下了最后一点。如果我console.log他们的lat和lon点适合并且适合地址。

也许我有一些事情需要监督,或者我错过了一些在这个功能中至关重要的特定部分。我希望这对你有意义,如果有一些问题,或者我是非特异性让我知道,我会解释更多。问候,丹尼尔

cw.map.prototype.generateMarkersFromvcard = function () {
    var cwMap = this;
    jQuery('.vcard').each(function (k, v) {
        var id = jQuery(v).data('markerid');
        var vCard = v;

        // TODO: only last address is shown
        var lat = jQuery('.latitude [title]', v).attr('title');
        var lon = jQuery('.longitude [title]', v).attr('title');

        console.log('latitude ' + lat + ', longitude ' + lon);

        // Fallback if lat and lon
        if (lat && lon) {

            var point = new google.maps.LatLng(lat, lon);
            var properties = {
                position: point,
                map: map,
                icon: " ",
                labelContent: '<i class="icon-pin map-pin"></i>',
                labelAnchor: new google.maps.Point(24, 48),
                labelClass: "labels" // the CSS class for the label
            };

            // setting the marker to the map
            var marker = new MarkerWithLabel(properties);
            cwMap.infowindow(marker, jQuery('.infowindow', v).html());
            markers[id] = marker;
        }
    });
    return this;
};

1 个答案:

答案 0 :(得分:1)

问题在于您创建infowindow时。 Google地图总是会获得上次marker的引用。

如果您查看此Google地图示例https://developers.google.com/maps/documentation/javascript/examples/event-closure

Google尝试在函数中执行google.maps.event.addListener(marker, 'click', function()以避免此错误引用问题;如果从函数中复制代码,则替换函数调用,此示例将不起作用。请看这个问题发生的例子。

http://jsfiddle.net/Lqshut95/

希望它有所帮助。