2011-06-29 12 views
0

私はループを実行しており、繰り返しごとにコンテンツと呼ばれる文字列varを設定しています。このvarは、GoogleマップマーカーのinfoWindowを作成するために使用しています。しかし、新しいインスタンスを作成する代わりに、varの値を変更する各反復で、これは値を変更し、マーカのinfoWindowsを常にvarの最後の値に設定します。contentなぜ間違っているのでしょうか。文字列のインスタンスに問題があります。var

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

     var marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(info[i].split(',')[5], 
             info[i].split(',')[6]), 
      optimized: false, 
      map: map, 
      zoom: 6, 
      draggable: true, 
      animation: google.maps.Animation.DROP 
     }); 


     var content = '<p>Central: ' + info[i].split(',')[1] + '</p>'; 

     var infoWindow = new google.maps.InfoWindow({ 
      content: content 
     }); 

     google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.open(map, this); 
      currentMarker = this; 
     }); 
    } 
+0

インデントを修正できますか?非常に混乱しています。 –

+1

forループの '}'はどこにありますか? – Dogbert

+0

'for'の閉じ括弧がありませんか? – Variant

答えて

3
google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.open(map, this); 
    currentMarker = this; 
}); 

すべてのハンドラが同じinfoWindowを開くように、外側の関数の変数に閉鎖とinfoWindowポイントを作成しています。 javascriptには関数スコープしかありません(for、for、forなど)。あなたが望むものを達成するためにクロージャを使用してください:

google.maps.event.addListener(marker, 'click', (function(infoW){ 
    return function() { 
     infoW.open(map, this); 
     currentMarker = this; 
    }; 
})(infoWindow)); 
+0

awesome men !!私はもう少しジャバスクリプトの仕事を読むつもりであることを知らなかった – Jorge

0

これは本当に奇妙です。

コンテンツをインラインで作成しようとしましたか?

var infoWindow = new google.maps.InfoWindow({ 
    content: '<p>Central: ' + info[i].split(',')[1] + '</p>' 
}); 
+0

これは私の最初の解決策でしたが、同じ結果でした – Jorge

関連する問題