2011-06-23 132 views
3

我有一個美國地圖,所有50個狀態都是可點擊的按鈕,當用戶點擊一個狀態時,我想顯示有關該狀態的信息,動態調用該狀態的數組。以下是我自己的弱嘗試,顯然不起作用。在函數中動態調用數組

var stateList = new Array("AK","AL","AR","AZ","CA","CO","CT","DC","DC2","DE","FL","GA","GU","HI","IA","ID", 
     "IL","IN","KS","KY","LA","MA","MD","ME","MH","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY", 
     "OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY"); 

function listenerForI(i) { 
    document.getElementById(stateList[i]) 
    .addEventListener('mousedown', function() { 
     stateSelect(stateList[i]); 
    }, false); 
} 

for (var i = 0; i < stateList.length; i++) { 
    listenerForI(i); 
} 

var HIdat = new Array(20,28,50,2) //one array for all 50 states COdat, AKdat, etc. 

function stateSelect(state){ 
    var display_data1 = state + "dat[0]"; 
    alert(display_data1); 
} 

我應該使用eval()嗎?我聽說過一些你可以用全球「窗口」[]做的事情,但我不明白這是如何工作的。

+0

如果您永遠問自己*「我應該使用eval嗎?」*,答案通常是*「否」。*。如果你問自己*「我應該使用全球窗口嗎?」*,答案通常是*「否」。*。 ; o) – user113716

+0

@patrick指出! – Stephen

回答

6

,可以儲存在自己的對象的狀態數組:

var stateData = { 
    HI: [1, 2, 3], 
    IL: [4, 5, 6], 
    ... 
}; 

var myData = stateData[state]; 
0

使用window是一種選擇,就像這樣:

window[state + "dat"]將讓你的陣列。

但是我會建議......究竟是什麼SLak剛剛發佈,所以這樣做。

+0

工作,但是這是不好的codin實踐,我必須downvote它= P。以及我想病得離開downvote了..但是,它不是很好 – Claudiu

+0

@claud不酷...我要建議@SLaks的解決方案,但他打敗了我。認爲對他來說,瞭解如何以'.something'和'['something']'兩種方式獲取變量仍然很好,這在某些情況下很有用。 –

+0

哈,@Slaks抱歉的名稱拼錯,我的手指只是想在鍵入一個c前k ... –

0

在JavaScript中,全局變量都是window對象的成員,因此,您可以使用數組索引的語法讓他們不使用eval,這通常是要避免的,就像這樣:

function stateSelect(state) { 
    var display_data1 = window[state + "dat"]; 
    alert(display_data1); 
}