将eventlistener添加到javascript数组

将eventlistener添加到javascript数组,javascript,google-maps,Javascript,Google Maps,我试图把我的标记放在谷歌地图上,并为每个标记添加一个信息窗口。单击其中一个标记后,我无法读取此行未定义的属性“名称”: markers[i].name.open(map, marker); 以下是完整的脚本: function initMap() { var map = new google.maps.Map(document.getElementById("map"), { zoom: 3, // zoom in on current location if availa

我试图把我的标记放在谷歌地图上,并为每个标记添加一个信息窗口。单击其中一个标记后,我无法读取此行未定义的属性“名称”:

markers[i].name.open(map, marker);
以下是完整的脚本:

function initMap() {
  var map = new google.maps.Map(document.getElementById("map"), {
    zoom: 3,
    // zoom in on current location if available (not done yet...)
    center: new google.maps.LatLng(5,5)
  });

  var markers = [
    // put all markers in a markers array
    @foreach ($markers as $marker)
      new google.maps.Marker({
        position: { lat: {{$marker->x}}, lng: {{$marker->y}} },
        // infowindow for each marker with its name
        name: new google.maps.InfoWindow({
          content: "{{$marker->name}}"
        })
      }), 
    @endforeach
  ];

  for (var i = 0; i < markers.length; i++) { 
    // add eventlistener for the infowindow we added earlier
    google.maps.event.addListener(markers[i], 'click', function() {
      markers[i].name.open(map, marker);
    });
    // add marker to map
    markers[i].setMap(map);
  }
}
函数initMap(){
var map=new google.maps.map(document.getElementById(“map”){
缩放:3,
//放大当前位置(如果可用)(尚未完成…)
中心:新google.maps.LatLng(5,5)
});
变量标记=[
//将所有标记放入标记数组中
@foreach($markers作为$marker)
新的google.maps.Marker({
位置:{lat:{{$marker->x}},lng:{{{$marker->y},
//每个标记及其名称的信息窗口
名称:新建google.maps.InfoWindow({
内容:“{{$marker->name}”
})
}), 
@endforeach
];
对于(var i=0;i
我正在将Laravel5.1与刀片模板引擎一起使用。

试试这个

 for (var i = 0; i < markers.length; i++) {
            // add eventlistener for the infowindow we added earlier
            (function(i) {
                google.maps.event.addListener(markers[i], 'click', function() {
                    //console.log(markers[i])
                    markers[i].name.open(map, markers[i]);
                });
                // add marker to map
                markers[i].setMap(map);
            })(i);

  }
for(变量i=0;i
这是有效的(
单击侦听器中的此
指的是被单击的
google.maps.Marker
):



逻辑看起来正常,如果将console.log(标记)放在最后一个for循环之前,会得到什么?我对拉威尔和刀锋不太了解,但我在《天使》中做过类似的事情。在你移动到下一步之前,看看是否所有的标记都在数组中loop@aishwatsingh希望此图像可以:。标记显示在地图上,因此它们肯定在数组中。这表示在标记上执行单击功能时,name属性未定义。我认为name属性需要正确的定义。您是否在anywhere live上运行此功能?@emporio否,标记本身未定义它不是名称属性,您也可以在上面的图像中看到,标记已定义,并且它们具有名称defined@aishwatsingh-您正在将一个对象传递给Marker函数,并且该对象具有name属性,但您将调用标记的返回值指定给数组,而不是具有name属性的对象。
for (var i = 0; i < markers.length; i++) { 
  // add eventlistener for the infowindow we added earlier
  google.maps.event.addListener(markers[i], 'click', function() {
    this.name.open(map, this);
  });
  // add marker to map
  markers[i].setMap(map);
}