如何将变量传递给JavaScript中另一个函数的参数中定义的函数?

时间:2014-04-24 00:00:19

标签: javascript google-maps google-maps-api-3

我正在使用Google Maps API v3 javascript。我正在使用Geocoder功能,我将传递城市名称并将其绘制在地图上。除了这个标记,我想为每个标记添加一个单独的信息窗口,但我无法做到这一点。所有infowindows都显示为最后一个标记设置的内容,而不是为每个标记设置不同的信息窗口。请在下面找到javascript代码:

   function initialize() {
              geocoder = new google.maps.Geocoder();
              var address = document.getElementById('address').value;
              var jString = JSON.parse(address);
              var infowindow;
              for (var key in jString) {
                  contentStr = JSON.stringify(jString[key]); //This is step where I am setting the content which is independent for every maker
                  if (jString.hasOwnProperty(key)) {
                      geocoder.geocode( { 'address': key}, function(results, status) {
                            if (status == google.maps.GeocoderStatus.OK) {
                              map.setCenter(results[0].geometry.location);
                              var marker = new google.maps.Marker({
                                  map: map,
                                  position: results[0].geometry.location
                              });
                              infowindow = new google.maps.InfoWindow({
                                  content: contentStr//Not able to access 'contentStr' set above.
                                  });
                              infowindow.open(map,marker);  


                            } else {
                              alert('Geocode was not successful for the following reason: ' + status);
                            }
                          });

                  }
              }

              var latlng = new google.maps.LatLng(-34.397, 150.644);
              var mapOptions = {
                zoom: 8,
                center: latlng
              }
              map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
            }


            google.maps.event.addDomListener(window, 'load', initialize);

调试后我理解由于某种原因,变量' contentStr'在最后一次迭代期间设置'循环仅用于以下所有函数调用:

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

所以基本上,我无法传递变量' contentStr'进入另一个函数的参数中定义的函数。我想我错过了一些基本的东西。有人可以指导我这个吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我多次遇到同样的问题。从下面的链接被盗。您需要将infowindow附加到您的标记。

Marker content (infoWindow) Google Maps

function createMarker(lat, lon, html) {
    var newmarker = new google.maps.Marker({
        position: new google.maps.LatLng(lat, lon),
        map: map,
        title: html
    });

    newmarker['infowindow'] = new google.maps.InfoWindow({
            content: html
        });

    google.maps.event.addListener(newmarker, 'mouseover', function() {
        this['infowindow'].open(map, this);
    });
}

第二种方式。 :

Google Maps API V3 infoWindow - All infoWindows displaying same content