0

好的,这可能是一个令人尴尬的问题,因为它几乎可以肯定是“按值传递”与按引用传递的问题。我正在使用 Google Maps JavaScript API v3 并尝试填充我自己的自定义地图标记。每个标记对应于一个带有 lat、long 和关于该位置的“注释”的位置,并被编码为数组内的一个对象。但是,虽然在循环中设置标记很好,但创建一个侦听器以触发动态更新另一个 div 并带有关于位置的注释似乎不起作用:

var myList = [ { lat: ..., lon: ..., title: ..., comment: ... }, { object repeats } ];

for (var i = 0; i < myList.length; i++) {
    // bunch of code setting up the marker
    var myMarker = new google.maps.Marker...

    google.maps.event.addListener(myMarker, 'click', function()
    {
        $('myDiv').empty().append(myList[i].comment);
    }

现在,除了 addListener 中的匿名函数内的代码之外,一切都正常了。似乎 .comment 不是按值传递,而是按引用传递(这是有道理的),但效果是 .append() 不会附加任何内容,因为循环经过位置数组的最后一个索引并且当.append 被称为它试图清空一个空值或未定义的值。关于如何解决这个问题的任何见解?

4

1 回答 1

0

您有关闭问题(或缺乏关闭)。

对不起,我在手机上,所以我的回答只是一个链接: https ://developers.google.com/maps/documentation/javascript/events#EventClosures

请参阅 Google 示例,了解如何在循环中将事件绑定到对象。

谢谢

于 2012-07-29T23:54:18.483 回答