Google Maps/Javascriptに関するいくつかの問題があります。私は問題が何であるかを知っていると思うが、それだけの方法を知らない。Googleマップ問題:閉じると参照渡し
私の問題の例はhereです。どのマーカーをクリックしても、2番目のマーカーが表示されます。私は間違った情報を明らかにイベントリスナーに渡していますが、コードを正しく取得できないようです。ここでは、コードのカットダウン一部です:
まず、ここに私のコードの一部です:
if (GBrowserIsCompatible() && mapResults != null) {
// Read in the JSON
var mapDetailsArray = loadJSON();
// Create a map
var map = new google.maps.Map2(document.getElementById(elementId));
map.setCenter(new google.maps.LatLng(mapDetailsArray[0].getLatitude(),
mapDetailsArray[0].getLongitude()), 13);
map.addControl(new google.maps.SmallMapControl());
// Add the points and center
var mgr = new google.maps.MarkerManager(map);
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < mapDetailsArray.length; i++) {
var mapDetails = mapDetailsArray[i];
var point = new google.maps.LatLng(mapDetails.getLatitude(), mapDetails
.getLongitude());
bounds.extend(point);
// Create our marker
var marker = new google.maps.Marker(point);
// What action do we use to show the hover
var infoAction = "mouseover";
marker.value = mapDetails;
google.maps.Event.addListener(marker, infoAction, function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
});
mgr.addMarker(marker, 1);
}
mgr.refresh();
}
「marker.value」常にmapDetailsが何であったかの最後の値としてセットを終わります。何かがあれば、ループが終了したらその値は "未定義"になると思いますが、その値はとにかく消えてはいけませんか?さまざまな値を試しました(たとえば、marker.value = i + 1;)が、どちらの点でも同じ値として表示されます。
イベントリスナーに正しい値をどのように渡すことができますか?これに
google.maps.Event.addListener(marker, infoAction, function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
});
:
google.maps.Event.addListener(marker, infoAction, (function(marker, point, map) { return function() {
alert(marker.value);
map.openInfoWindowHtml(point, getResultInfoContent(marker.value));
}})(marker, point, map));
これは、あなたが望むクロージャを作成します。この
。乾杯グレッグ。私は以前のようなものを試していましたが、return関数(){...}はコードをラッピングしませんでした。 –
私は同じ問題を経験し、同じ修正を使用しました。私はこれがJavascriptのバグだと本当に感じています。 – SingleNegationElimination
私はそれがバグだとは思わない、それはあまり直感的ではない – Greg