1

次の for ループがあります。

for (loc in locations){
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
    position: new google.maps.LatLng(newLoc[0], newLoc[1]),
        map: map,
        title: loc
    });
    google.maps.event.addListener(loc, 'click', function() {
        console.log(loc);
    });
};

一連のマップマーカーを生成し、それらをクリックしたときにそれらの名前 (loc) を console.log に記録するとは思いません。しかし、それらはすべて、場所ログの最後の項目を console.logging することになります。

これは、名前が同じだからだと思います

これはなぜですか、どうすればよいですか?

4

2 に答える 2

4

上で述べたように、クロージャーが必要です。

for (loc in locations){
  (function(loc){  
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
      position: new google.maps.LatLng(newLoc[0], newLoc[1]),
      map: map,
     title: loc
    });

    google.maps.event.addListener(loc, 'click', function() {
      console.log(loc);
    });
  })(loc);
};
于 2012-06-13T16:03:04.070 に答える
0

You need to create a closure. By creating a closure, you effectively 'bake' the state of the internal function at the time of execution, which is NOT the same time as the 'click' handler is fired.

EDIT: Removed terrible code - use Nayjest's much cleaner solution above!

于 2012-06-13T16:00:10.657 に答える