Google Maps API标记循环未正确更改标题

时间:2013-03-12 05:56:15

标签: javascript google-maps google-maps-markers

我一直在搜索stackoverflow和网络的其余部分无济于事。我是一名新手程序员,我完全坚持这个问题。

我有一个结构如下的数组:

地址a SuburbA AddressB SuburbB

当以下代码运行时,它会通过放置一个标记来更新地图,并在该标记周围放置一个10英里的圆圈。问题是,当我将鼠标悬停在标记上时,工具提示/标题始终是SuburbB的标题,即使标记和圆圈位于正确的位置。

让我发疯,帮助将不胜感激!

 function codeAddress(){

    var arrayLength = array.length;
    var looper = 0;
    var looper2 = 1;

    while (looper < arrayLength) {

        alert("Geocode started");

        sAddress = array[looper];
            alert (looper)
            alert("Address set" + sAddress)

        sName = array[looper2];
            alert (looper2)
            alert("Name set" + sName)

        geocoder.geocode( {'address': sAddress}, function(results, status) {

            alert("Make marker");

            if (status == google.maps.GeocoderStatus.OK) {

                map.setCenter (results[0].geometry.location);

                var marker2 = new google.maps.Marker({
                    map: map,
                    title: sName,
                    position: results[0].geometry.location
                });

                var circle = new google.maps.Circle({
                    map: map,
                    radius: 16093,    // 10 miles in metres
                    fillColor: '#AA0000',
                    strokeWeight: 2,
                    strokeOpacity: 0.5 
                   });

                circle.bindTo('center', marker2, 'position');



        }    else {

                alert("Geocode was not successful for the following reason: " + status);

            }
        })

        looper = looper + 2;
        looper2 = looper2 + 2;
    }
}

1 个答案:

答案 0 :(得分:0)

您遇到了臭名昭着的Javascript循环问题。 Javascipt范围是功能级别,而不是块级别,这可能会让人感到困惑:http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/。基本上,行:

geocoder.geocode( {'address': sAddress}, function(results, status) {

是为每个地理编码设置数组中的最后一项,你需要做的是将第一个参数包装在一个闭包中:

geocoder.geocode( (function () { return {'address': sAddress} })(), function(results, status) {

标记和圆圈很好,因为它们是在函数内部定义的。