首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌地图api v3 infoBubble数组不工作

谷歌地图api v3 infoBubble数组不工作
EN

Stack Overflow用户
提问于 2012-11-20 04:36:16
回答 1查看 1.5K关注 0票数 1

我有一个使用infoBubble.js的地图。

在这个映射中,有一个我要遍历的位置数组。

单击自定义图标时,infoBubble应该会弹出,但由于某些原因,它只会打开第一个数据项。

有谁知道为什么会发生这种情况吗?

我已经在这里为它开发了代码;

代码语言:javascript
复制
var arrMarkers = [
    ['Santiago de Cuba', 20.040450354169483, -75.8331298828125],
    ['Las Tunas', 20.97682772467435, -76.9482421875],
    ['Camaguey', 21.39681937408218, -77.9205322265625],
    ['Playa Santa Lucia', 21.555284406923192, -77.0526123046875],
    ['Santa Clara', 22.421184710331854, -79.9639892578125],
    ['Cienfuegos', 22.161970614367977, -80.4473876953125],
    ['Havana', 23.12520549860231, -82.3919677734375],
    ['San Cristobel', 22.730590425493833, -83.045654296875],
    ['Pinar del Rio', 22.43641760076311, -83.69384765625]
];

var arrInfoWindowsCuba = [];

var arrInfoWindows = [];
arrMarkers[i] = marker;

function init() {

    var mapCenter = new google.maps.LatLng(21.616579336740603, -78.892822265625);
    map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 7,
        center: mapCenter,
        mapTypeId: google.maps.MapTypeId.TERRAIN
    });
    var image = '/wp-content/themes/Shootcuba/images/map-icon.png';

    for (i = 0; i < arrMarkers.length; i++) {
        var marker = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(arrMarkers[i][1], arrMarkers[i][2]),
            icon: image
        });


        var infoBubble = new InfoBubble({
            content: '<div class="phoneytext">' + arrMarkers[i][0] + '<div class="left-col2"></div></div>',
            boxClass: 'info-box',
            alignBottom: true,
            pixelOffset: new google.maps.Size(-150, -40),
            maxWidth: 300,
            padding: 0,
            closeBoxMargin: '0px',
            borderColor: '#ffffff',
            borderRadius: '0',
            maxWidth: 535,
            disableAutoPan: false,
            hideCloseButton: false,
            backgroundClassName: 'phoney'
        });
        google.maps.event.addListener(marker, 'click', function () {
            infoBubble.open(map, marker, i);
            console.log(arrMarkers);
        });

        arrMarkers[i] = marker;
        arrInfoWindowsCuba[i] = infoBubble;

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 05:42:02

Here's a working example。我去掉了您拥有的一些数组(我不完全确定它们都是用来做什么的,它们只是在您发布的代码片段中造成了错误),但除此之外,它们与您正在做的事情是非常真实的。最大的区别是我创建了一个单独的函数来创建标记。这样做主要是为了让点击事件的作用域彼此分开,因为总是触发最后一个事件的点击事件向我表明作用域没有正确地分开。

特别是,我认为发生的情况是,您不断重写标记和infoBubble的值的事件函数,事件侦听器将引用这些变量的当前值,而不是第一次附加侦听器时的值。在我看来,使用单独的函数调用来维护事件的作用域是最干净的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13461764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档