2012-07-29 74 views
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被稱爲試圖清空null或未定義的值。任何洞察到如何解決這個問題?

回答

0

您有一個關閉問題(或者沒有關閉)。

對不起,我爲我的手機上,所以我的答案是隻是一個鏈接: https://developers.google.com/maps/documentation/javascript/events#EventClosures

參見如何綁定事件OBJETS在一個循環中,當谷歌例子..

謝謝

+0

太棒了!這工作。我甚至不知道「關閉」,我是一名CS專業人士...... -__- – 2012-07-30 16:54:26