0

Google Maps API 3のサンプルをいくつかダウンロードしましたが、次のようなコードが表示されます。

(function (i, marker) {
    google.maps.event.addListener(marker, 'click', function () {
        if (!infowindow) {
            infowindow = new google.maps.InfoWindow();
        }
        infowindow.setContent("Message" + i);
        infowindow.open(map, marker);
    });
})(i, marker);

誰かがこれが何を意味するのか説明してもらえますか?または、上記のコードをさまざまな方法で書き直すことはできますか?私はJavaScriptに少し慣れていませんが、上記のコードが正確に何をするのかわかりませんか?

これが完全なスクリプトです

関数markicons(){

    InitializeMap();

    var ltlng = [];

    ltlng.push(new google.maps.LatLng(17.22, 78.28));
    ltlng.push(new google.maps.LatLng(13.5, 79.2));
    ltlng.push(new google.maps.LatLng(15.24, 77.16));

    map.setCenter(ltlng[0]);



    for (var i = 0; i <= ltlng.length; i++) {
        marker = new google.maps.Marker({
            map: map,
            position: ltlng[i]
        });

        (function (i, marker) {

            google.maps.event.addListener(marker, 'click', function () {

                if (!infowindow) {
                    infowindow = new google.maps.InfoWindow();
                }

                infowindow.setContent("Message" + i);

                infowindow.open(map, marker);

            });

        })(i, marker);

    }

}
4

3 に答える 3

1
(function (i, marker) {
    google.maps.event.addListener(marker, 'click', function () {
        if (!infowindow) {
            infowindow = new google.maps.InfoWindow();
        }
        infowindow.setContent("Message" + i);
        infowindow.open(map, marker);
    });
})(i, marker);

コード:

  • 定義された関数をすぐに実行し、それに渡しi、そしてmarker
  • click次に、イベントのマーカーにハンドラーを追加します
  • マーカーをクリックすると、既存のマーカーがない場合はマーカーがinfowindow作成されます
    • infowindow次に、コンテンツを追加し、マップ上のマーカーでを開きます
于 2012-11-19T13:19:19.337 に答える
0

このコードは、指定されたマーカーにクリックイベントハンドラーを割り当てているため、クリックすると、新しい情報ウィンドウに「メッセージ」というテキストが表示され、その後にマーカーインデックスのように見えます。

ほとんどの場合、このコードはすべてのマーカーのループの一部です。

私があなたの目標を正しく理解している場合は、そのような関数をコードに追加してください。

function AssignMarkerClick(marker, index) {
    google.maps.event.addListener(marker, 'click', function () {
        if (!infowindow) {
            infowindow = new google.maps.InfoWindow();
        }

        infowindow.setContent("Message" + index);
        infowindow.open(map, marker);
    });
}

次に、ループを次のように変更します。

for (var i = 0; i <= ltlng.length; i++) {
    marker = new google.maps.Marker({
        map: map,
        position: ltlng[i]
    });
    AssignMarkerClick(marker, i);
}
于 2012-11-19T13:19:27.453 に答える
0

コードスニペットは、変数の宣言を回避することを除いて、以下のコードと同等ですmyFunc

var myFunc = function(i, marker) {
    google.maps.event.addListener(marker, 'click', function () {
        if (!infowindow) {
            infowindow = new google.maps.InfoWindow();
        }
        infowindow.setContent("Message" + i);
        infowindow.open(map, marker);
    });
};
myFunc(i, marker);

これは、可変変数の値をキャプチャするための一般的なJavaScriptiパターンです(または、 forループmarker内にある場合は変更される可能性があります。それがないと、クリックハンドラーで使用される最後の値になります)。imarker

于 2012-11-19T14:32:42.643 に答える