无法定义数据。为什么是这样?

时间:2015-12-17 19:15:06

标签: javascript jquery gmaps.js

我正在制作一些有趣的代码,而且我被困了。

在JS文件的第66行。它无法定义数据......它在范围内吗?

请帮帮我。

http://codepen.io/shiva112/pen/JGXoVJ

  function PlaceMarkers(data){
  for (i = 0; i < data.length - 1; ++i) {
    if (data[i].country == "NL"){  

      map.addMarker({
          lat: data[i].lat,
          lng: data[i].lng,
          title: 'Marker with InfoWindow',
          infoWindow: {content: "Station: " + data[i].name},
          click: function(e) {
            $("#info h2").remove(); 
            $("#info").append( "<h2>U hebt station " + data[i].name + " geselecteerd.</h2>" ); 
           }
      });

    }  
  }   

追加行不起作用。 data [i] .name 2行以上是在范围内!但为什么不在追加行中的数据[i] .name ..

2 个答案:

答案 0 :(得分:4)

点击处理程序中的

data[i].name不会被评估,直到for循环结束,并且值已更改。您可以创建一个立即调用的函数表达式来解决这个问题:

function PlaceMarkers(data) {
  for (i = 0; i < data.length; ++i) {
    if (data[i].country == "NL") {
      (function(station) {
        map.addMarker({
          lat: station.lat,
          lng: station.lng,
          title: 'Marker with InfoWindow',
          infoWindow: {
            content: "Station: " + station.name
          },
          click: function(e) {
            $("#info h2").remove();
            $("#info").append("<h2>U hebt station " + station.name + " geselecteerd.</h2>");
          }
        });

      })(data[i]);

    }
  }
}

http://codepen.io/anon/pen/obxzmG

答案 1 :(得分:0)

就像@JasonP所说的那样,点击处理程序i在for循环结束之后才会被评估。

您可以设置自定义密钥name,然后使用this.name这样访问它:

map.addMarker({
    lat: data[i].lat,
    lng: data[i].lng,
    name: data[i].name,
    title: 'Marker with InfoWindow',
    infoWindow: {content: "Station: " + data[i].name},
    click: function(e) {
      $("#info h2").remove(); 
      $("#info").append( "<h2>U hebt station " + this.name + " geselecteerd.</h2>" ); 
    }
});

http://codepen.io/pespantelis/pen/LGNRgL