字符串var实例的问题

时间:2011-06-29 20:22:55

标签: javascript jquery

我正在做一个循环,每次迭代我都会设置一个名为content的字符串var,这个var我用来创建一些google地图标记的infoWindows。但是在每次更改var的值而不是创建新实例的迭代中,这会修改值并始终使用var content的最后一个值来设置标记的infoWindows,这就是为什么我做错了。 / p>

    for (var i = 0; i < info.length; i++) {

        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(info[i].split(',')[5],
                                        info[i].split(',')[6]),
            optimized: false,
            map: map,
            zoom: 6,
            draggable: true,
            animation: google.maps.Animation.DROP
        });


        var content = '<p>Central: ' + info[i].split(',')[1] + '</p>';

        var infoWindow = new google.maps.InfoWindow({
            content:  content
        });

        google.maps.event.addListener(marker, 'click', function () {
            infoWindow.open(map, this);
            currentMarker = this;
        });
    }

2 个答案:

答案 0 :(得分:3)

google.maps.event.addListener(marker, 'click', function () {
    infoWindow.open(map, this);
    currentMarker = this;
});

创建一个闭包和infoWindow指向外部函数变量,以便所有处理程序打开相同的infoWindow。 javascript中只有函数范围(没有人为每个for,if等)。使用闭包来达到你想要的效果:

google.maps.event.addListener(marker, 'click', (function(infoW){
    return function () {
        infoW.open(map, this);
        currentMarker = this;
    };
})(infoWindow));

答案 1 :(得分:0)

这确实很奇怪。

您是否尝试将内容构建为内联?

var infoWindow = new google.maps.InfoWindow({
    content:  '<p>Central: ' + info[i].split(',')[1] + '</p>'
});