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 有点陌生,不知道上面的代码到底是做什么的?

这是完整的脚本

功能标记(){

    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

您的代码片段等效于下面的代码,只是它避免声明变量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);

这是一种常见的javascript模式来捕获可变变量的值(i或者marker如果我们在for 循环中可以更改;没有它,它将是最后一个值,i并且marker将在点击处理程序中使用)。

于 2012-11-19T14:32:42.643 回答
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 回答