以下代码在做什么?

时间:2012-11-19 13:14:43

标签: javascript google-maps-api-3

我已经为Google maps API 3下载了一些示例,我可以看到一些代码如bellow:

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

这是完整的脚本

function 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);

    }

}

3 个答案:

答案 0 :(得分: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);

代码:

  • 立即执行定义的函数,传递给它imarker
  • 然后,它会为click事件
  • 的标记添加处理程序
  • 当您点击标记时,如果没有现有infowindow,则会创建一个。{li>
    • 然后添加内容并在地图上的标记上打开infowindow

答案 1 :(得分:0)

此代码在给定标记上分配click事件处理程序,以便在单击时弹出新信息窗口,其中包含文本“Message”,后面跟着标记索引。

很可能这段代码是所有标记循环的一部分。

如果我正确理解了您的目标,请在代码中添加此类功能:

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);
}

答案 2 :(得分:0)

你的代码snipet等同于下面的代码,除了它避免声明变量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 模式来捕获可变变量的值(如果我们在 for循环中,imarker可能会发生变化;没有它,它将是点击处理程序中使用的imarker的最后一个值。)