2012-09-24 49 views
1

可能重複:
Looping through Markers with Google Maps API v3 Problem傳遞值在for循環事件listeners-的Javascript

我有一個循環,其中從我的數組元素中提取某些數據,然後添加一個事件每個迭代的監聽者。但我需要將這些值傳遞給每個關聯的偵聽器,但最終只有偵聽器中的最後一個數組項值。我試圖從"this"瞭解,但解決方案似乎不適合我的情況,我很困惑。這是我的代碼:

for(var i=0;i<route.length;i++) 
{ 
    var input= route[i]; 
    var sdata= input.split("@",19) 
    //Some code 
    google.maps.event.addListener(marker,'click',showiwindow); 
} 

function showiwindow(event) 
{ 
    var input= event.latLng; 
    //some code 
    ... 
    document.getElementById('<%= lbl1.ClientID %>').innerHTML = sdata[1]; 
    document.getElementById('<%= lbl2.ClientID %>').innerHTML = sdata[2]; 
    document.getElementById('<%= lbl3.ClientID %>').innerHTML = sdata[3]; 
    document.getElementById('<%= lbl4.ClientID %>').innerHTML = sdata[4];  
    ...... 
}  

當我點擊一個標記,我只得到了最後一次迭代的值。回到那個鏈接中的解決方案,我該如何傳遞數組以及i的迭代值。請參閱我的意思鏈接。

+0

@ChrisFrancis:我認爲我在我的問題中提供的鏈接比您提供的更重要。但讓我告訴你,我對他們遵循的解決方法感到困惑,所以不得不提出這個問題。 – Cdeez

+1

@Cdeez有一個閱讀 - > http://james.padolsey.com/javascript/closures-in-javascript/你需要實現一個閉包,這個鏈接解釋他們很好(IMO) – ManseUK

回答

4

這樣的事情呢?

for(var i=0;i<route.length;i++) 
{ 
    var input= route[i]; 
    var sdata= input.split("@",19) 
    //Some code 
    showiwindow(sdata); 
} 

function showiwindow(sdata) 
{ 
    google.maps.event.addListener(marker,'click', function(event) { 
    var input= event.latLng; 
    //some code 
    ... 
    document.getElementById('<%= lbl1.ClientID %>').innerHTML = sdata[1]; 
    document.getElementById('<%= lbl2.ClientID %>').innerHTML = sdata[2]; 
    document.getElementById('<%= lbl3.ClientID %>').innerHTML = sdata[3]; 
    document.getElementById('<%= lbl4.ClientID %>').innerHTML = sdata[4];  
    ...... 
    }); 
}  
+0

我已經解決了問題,您的解決方案也運行良好。謝謝。 – Cdeez

0

非常感謝您提供的各種鏈接。終於清楚瞭解如何處理它:

for(var i=0;i<route.length;i++) 
{ 
    var input= route[i]; 
    var sdata= input.split("@",19) 
    //Some code 
    google.maps.event.addListener(marker,'click',showiwindow(sdata)); 
} 

function showiwindow(rdata) 
{ 
    return function(){ 
    .....//some code 
    document.getElementById('<%= lbl4.ClientID %>').innerHTML =rdata[4]; 
    ..... 
    }; 
}