Jquery 将数组传递给Google maps地理编码器以在信息窗口中使用(多个地址)

Jquery 将数组传递给Google maps地理编码器以在信息窗口中使用(多个地址),jquery,arrays,google-maps-api-3,google-geocoder,Jquery,Arrays,Google Maps Api 3,Google Geocoder,我正在尝试使用Geocoder功能在Google地图上创建地图标记。我正在对多个地址进行地理编码。我可以成功地创建标记,但我还需要为每个标记创建一个信息窗口,其中显示有关该位置属性的各种不同信息。例如,我有一个数组中用逗号分隔的价格信息。我已经通过了price[I]数组,但无法检索每个price并将其分配到正确的信息窗口。我得到的只是数组中分配给每个标记的最后一个价格。我试图通过使用回调函数调用geocoder来实现这一点,因为我无法直接将price数组传递给geocoder,它返回时没有定义。

我正在尝试使用Geocoder功能在Google地图上创建地图标记。我正在对多个地址进行地理编码。我可以成功地创建标记,但我还需要为每个标记创建一个信息窗口,其中显示有关该位置属性的各种不同信息。例如,我有一个数组中用逗号分隔的价格信息。我已经通过了price[I]数组,但无法检索每个price并将其分配到正确的信息窗口。我得到的只是数组中分配给每个标记的最后一个价格。我试图通过使用回调函数调用geocoder来实现这一点,因为我无法直接将price数组传递给geocoder,它返回时没有定义。有人能帮忙吗

地址数组如下所示[address1,address2,address3]

价格数组如下所示[500000400000300000]

var addresses   = address.split(','),
    prices      = price.split(',');

    var infowindow = new google.maps.InfoWindow();

    for (var i = 0; i < addresses.length; i++) {
        geocoder.geocode({'address': addresses[i]}, makeCallback(i));
    }

    function makeCallback(addressIndex) {

        var geocodeCallBack = function(results, status) {

            if (status != google.maps.GeocoderStatus.OK) {
                console.log("Geocode was not successful for the following reason: " + status);
            } else {
                var point = results[0].geometry.location;

                var i = addressIndex;
                var marker = new google.maps.Marker({
                    map: map,
                    title: "",
                    position: results[0].geometry.location
                });
                infowindow.setContent('<p>'+ prices[i] + '</p>');

                //Open the infowindow
                google.maps.event.addListener(marker, 'click', function() {
                    infowindow.open(map, this);
                });

                main.setMap(map, point, titles[i], bounds);
            }
        }

    return geocodeCallBack;
}
var addresses=address.split(','),
价格=价格.分割(',');
var infowindow=new google.maps.infowindow();
对于(变量i=0;i');
//打开信息窗口
google.maps.event.addListener(标记'click',函数(){
打开(地图,这个);
});
main.setMap(映射、点、标题[i]、边界);
}
}
返回全部返回;
}

您正在为每个标记设置相同的
信息窗口的内容,因此无论单击哪个标记,它都会显示相同的内容(带有最后分配的值)

移动行
var infowindow=new google.maps.infowindow()
到infowindow.setContent(“”+prices[i]+“

”)前面的右边和正确的值应出现

或者,在所有标记中共享一个
信息窗口(因此一次只能看到一个):


问题在于,在创建标记时,而不是单击标记时,您正在设置
infowindow
的内容。移动
infowindow.setContent(''+prices[i]+'

')到标记器点击功能中,就在信息窗口的前面。打开(地图,本)。在这种情况下,将
infowindow
声明保留在原来的位置。

Legend!非常感谢你。我真不敢相信事情这么简单:-)很抱歉再次打扰你,但我无法关闭信息窗口。我希望打开的信息窗口在单击另一个标记时自动关闭。你有什么想法吗?是的!我编辑了我的答案,以显示另一种只允许一个信息窗口的方式,使用代码顶部的
var infowindow…
声明。