2012-08-10 61 views
0

我有一個數組:JS調用函數存儲在二維數組

var markerArray = [];//global var 
var markerCnt = 0;//global var 
for(var x=0;x<10;x++){ 
    markerArray[markerCnt] = new Array(agency, address, marker, onMarkerClick); 
    //agency and agency = string 
    //marker = google maps marker 
    //onMarkerClick = function 
    markerCnt++; 
} 

如何調用指定onMarkerClick功能? 請問我只是做:

markerArray[0][3](); 
+1

是的,你會的。 – Esailija 2012-08-10 21:23:08

+0

假設'onMarkerClick'引用了一個函數,那麼是的。你應該已經嘗試過,然後再發布你的問題:) – bkconrad 2012-08-10 21:23:09

+1

你可以使用'[代理,地址,標記,onMarkerClick]'而不是'new Array()'來創建新數組'' – Pointy 2012-08-10 21:36:37

回答

0

的回答你的問題是

無論有多少維度,您都可以執行存儲在數組中的任何函數。

// perfectly valid 
markerArray[0][3]() 

// as is this 
someArray[0][1][7][2]() 

要超越的不僅僅是回答你的問題一點點,我會使用對象的數組建議,這樣你就不必執行數組成員。這將增加您的代碼的可讀性,並且如果您在6個月內試圖弄清楚您做了什麼,可以節省幾個小時。

var markerArray = [];//global var 
var markerCnt = 0;//global var 
for(var x=0;x<10;x++){ 
    markerArray[markerCnt] = { 
     agency: agency 
     address: address 
     marker: marker 
     onMarkerClick: onMarkerClick 
    }; 
    //agency and agency = string 
    //marker = google maps marker 
    //onMarkerClick = function 
    markerCnt++; 
} 

// then reference your function 
markerArray[0].onMarkerClick(); 
+0

好的答案! :) – jwatts1980 2012-08-10 21:45:25

1

作爲替代解決方案,你也可以這樣做:

var markerArray = []; 
var markerCnt = 0; 

for(var x=0;x<10;x++){ 
    markerArray[markerCnt] = { 
     'agency' : agency, 
     'address' : address, 
     'marker' : marker, 
     'click' : onMarkerClick 
    }; 
    markerCnt++; 
} 

//To call the click 
markerArray[0].click(); 
+0

那麼誰是第一? ;) – 2012-08-10 21:47:20

+0

我不想點擊標記壽,我已經有了這個功能,我想點擊地圖以外的列表項,並打開一個infowindow。我想到了。 – Ray 2012-08-10 21:54:18

+0

您正在使用Google Maps API嗎?你應該在你的問題中加上標籤。我剛剛完成了一個搜索表單,該表單返回一個Google Map和地址上的標記,並在地址左邊列出了一個列表。我正在使用地圖API來反向查找地址的緯度/經度。點擊地址列表會使標記反彈。點擊標記將突出顯示相應的列表項並彈出一個信息窗口,其中包含指向地址詳細信息頁面的鏈接。這是所有的AJAX和jQuery和Javascript。 – jwatts1980 2012-08-11 21:23:24