1

次のコードがあります。

for (var i in listings){
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: function(e){
      (function(listing){
         console.log(listing.Title);
      })(listing);
    },  
  });
}

マーカーをクリックすると、常に最後のリストのタイトルが表示されます。

4

2 に答える 2

5
for (var i in listings) {
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: (function (listing) {
      return function(e) {
        console.log(listing.Title);
      };
    })(listing)
  });
}

クロージャーを間違った方法で配置しました。クリック イベントが呼び出されたときではなく、すぐに実行する必要があります。

于 2013-11-04T02:46:48.993 に答える
2

わかりました:

for (var i in listings){
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: (function(listing){
      return function(e){
         console.log(listing.Title);
      })(listing),
  });
}
于 2013-11-04T02:49:25.177 に答える