0

私はいくつかのテストを行っており、この奇妙な状況に遭遇しました: 最初のケース (ループ内の InfoWindows のようなオブジェクトの割り当て) は期待どおりに機能しませんが、割り当てを 1 つずつ作成すると機能します。

予想される動作は、マウスがマーカーの上にあるときに InfoWindow が開くことです。多くのウィンドウを同時に開いておく必要があります。

表面的には、違いはわかりません。どうしたの?各ケースに関連するコードと完全な JSFiddle を示しています。

JSFiddleが機能しない

    iwArray = [];
    for (var i = 0; i < 3; i++) {
      iwArray[i] = new google.maps.InfoWindow({content: "w "});
      google.maps.event.addListener(marker[i], 'mouseover', function(e) {
        iwArray[i].open(map, this);
      });
    }

動作しますが、醜い です JSFiddle

    iwArray = [];

    iwArray[0] = new google.maps.InfoWindow({content: "w 0"});
    google.maps.event.addListener(marker[0], 'mouseover', function(e) {
      iwArray[0].open(map, this);
    });

    iwArray[1] = new google.maps.InfoWindow({content: "w 1"});
    google.maps.event.addListener(marker[1], 'mouseover', function(e) {   
      iwArray[1].open(map, marker[1]);
    });

    iwArray[2] = new google.maps.InfoWindow({content: "w 2"});
    google.maps.event.addListener(marker[2], 'mouseover', function(e) {
      iwArray[2].open(map, marker[2]);
    });
4

2 に答える 2

3
var iwArray = [];
for (var i = 0; i < 3; i++) {
  iwArray[i] = new google.maps.InfoWindow({content: "w " + i });
  google.maps.event.addListener(marker[i], 'mouseover', createListener(i, map));
}

function createListener(i, map) {
    return function(e) {
        iwArray[i].open(map, this);
    };
}
于 2012-04-10T19:48:32.353 に答える
3

閉鎖を使用する:

 for (var i = 0; i < 3; i++) {
    (function(i){
       iwArray[i] = new google.maps.InfoWindow({content: "w "});
       google.maps.event.addListener(marker[i], 'mouseover', function(e) {
          iwArray[i].open(map, this);
       });
    })(i);
}
于 2012-04-10T19:49:24.460 に答える