Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图信息窗口未从var加载内容_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 谷歌地图信息窗口未从var加载内容

Javascript 谷歌地图信息窗口未从var加载内容,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我需要帮助获取信息窗口以显示位置[I][0]中的值 locations[i][1]对于address值来说工作正常,但我希望能够从var“locations”为infowindow中的每个标记设置自定义标题 我可以定义一个var来设置content和info窗口的工作方式,但是对于每个标记都是一样的,而不是从var“locations”中提取 感谢您的帮助 function initialize() { geocoder = new google.maps.Geocoder(); var m

我需要帮助获取信息窗口以显示位置[I][0]中的值

locations[i][1]对于address值来说工作正常,但我希望能够从var“locations”为infowindow中的每个标记设置自定义标题

我可以定义一个var来设置content和info窗口的工作方式,但是对于每个标记都是一样的,而不是从var“locations”中提取

感谢您的帮助

function initialize() {


geocoder = new google.maps.Geocoder();
var myOptions = {
zoom: 10,
center: new google.maps.LatLng(0, 0),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(
document.getElementById("map_canvas"),
myOptions);
setMarkers(map, locations);
}

var locations = [
['Bondi Beach', '798 9th Ave, New York, NY', 4],
['Coogee Beach', '42 E 29th St, New York, NY', 5],
['Cronulla Beach', '56 W 25th St, New York, NY', 3],

];



function setMarkers(map, locations) {

var infowindow = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
 var marker, i; 

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


   geocoder.geocode({'address': locations[i][1]}, function(results, status) { 

    marker = new google.maps.Marker({
    position: results[0].geometry.location,
    map: map,


    });


  google.maps.event.addListener(marker, 'click', (function(marker, i) {
    return function() {

      infowindow.open(map, marker);
      infowindow.setContent(locations[i][0]);
    }
  })(marker, i));

bounds.extend(marker.getPosition());


map.fitBounds(bounds);

})
  }
}
函数初始化(){
geocoder=新的google.maps.geocoder();
变量myOptions={
缩放:10,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
}
var map=new google.maps.map(
document.getElementById(“地图画布”),
肌肽);
设置标记(地图、位置);
}
变量位置=[
['Bondi Beach','798 9th Ave,New York,NY',4],
['Coogee Beach','42 E 29街,纽约州,纽约州,5],
['Cronulla Beach','56 W 25街,纽约州纽约市,3],
];
功能设置标记(地图、位置){
var infowindow=new google.maps.infowindow();
var bounds=new google.maps.LatLngBounds();
var标记,i;

对于(var i=0;i发生的是单击事件侦听器正在执行
i=3
(循环结束后的最后一个i值),因此由于此未定义状态,没有出现信息窗口

因为引入了地理编码器,所以在click侦听器获得分配给它们的函数之前,外部
for
循环就完成了。因此,需要另一个函数范围包装器,即地理编码之外的包装器,以在侦听器中保持正确的i值

function setMarkers(map, locations) {

  var infowindow = new google.maps.InfoWindow();
  var bounds = new google.maps.LatLngBounds();
  var marker, i; 

  //CHANGED REMOVED EQUALS SIGN
  for (var i=0; i<locations.length; i++) { 

   //ADDED
   (function(i) {
   geocoder.geocode({'address': locations[i][1]}, function(results, status) { 

     marker = new google.maps.Marker({
       position: results[0].geometry.location,

      //REMOVED COMMA
       map: map
     });

     google.maps.event.addListener(marker, 'click', (function(marker, i) {
       return function() {

         //CHANGED ORDER
         infowindow.setContent(locations[i][0]);
         infowindow.open(map, marker);
       }
     })(marker, i));

     bounds.extend(marker.getPosition());
     map.fitBounds(bounds);
     });

    // ADDED
    })(i);
   }
 }
功能设置标记(地图、位置){
var infowindow=new google.maps.infowindow();
var bounds=new google.maps.LatLngBounds();
var标记,i;
//变等号

对于(var i=0;i发生的是单击事件侦听器正在执行
i=3
(循环结束后的最后一个i值),因此由于此未定义状态,没有出现信息窗口

因为引入了地理编码器,所以在click侦听器获得分配给它们的函数之前,外部
for
循环就完成了。因此,需要另一个函数范围包装器,即地理编码之外的包装器,以在侦听器中保持正确的i值

function setMarkers(map, locations) {

  var infowindow = new google.maps.InfoWindow();
  var bounds = new google.maps.LatLngBounds();
  var marker, i; 

  //CHANGED REMOVED EQUALS SIGN
  for (var i=0; i<locations.length; i++) { 

   //ADDED
   (function(i) {
   geocoder.geocode({'address': locations[i][1]}, function(results, status) { 

     marker = new google.maps.Marker({
       position: results[0].geometry.location,

      //REMOVED COMMA
       map: map
     });

     google.maps.event.addListener(marker, 'click', (function(marker, i) {
       return function() {

         //CHANGED ORDER
         infowindow.setContent(locations[i][0]);
         infowindow.open(map, marker);
       }
     })(marker, i));

     bounds.extend(marker.getPosition());
     map.fitBounds(bounds);
     });

    // ADDED
    })(i);
   }
 }
功能设置标记(地图、位置){
var infowindow=new google.maps.infowindow();
var bounds=new google.maps.LatLngBounds();
var标记,i;
//变等号

对于(var i=0;ii如果我有更多的状态id投票给你。我知道循环有问题,但我永远不会自己解决这个部分。谢谢你。我很欣赏内联评论,这不仅解决了我的问题,还帮助我学习。我忘了添加,地理编码器是异步的(就像Ajax中的a),这意味着它等待响应。它调用Google服务器,因此结果不会立即出现。当响应到达时,将执行回调(函数(结果,状态))。这解释了为什么地理编码中的代码不会立即执行。如果我有更多的状态,我会投票给你。我知道循环有问题,但我永远不会自己解决这一部分。谢谢。我感谢内联注释。这不仅解决了我的问题,还帮助我学习。我忘了添加,地理编码是异步的(与Ajax中的A类似),这意味着它等待响应。它调用Google服务器,因此结果不会立即出现。当响应到达时,将执行回调(函数(结果、状态))。这解释了地理编码中的代码不会立即执行的原因。