2012-04-05 32 views
2

如何獲得變量您好,我有一個while循環:在函數名和的getElementById

var i = 0; 

while(i < 20) 
{ 
    function showi() 
    { 
     document.getElementById('tablei').style.display = 'block'; 
     document.getElementById('hidei').style.display = 'block'; 
     document.getElementById('showi').style.display = 'none'; 
    } 

    function hidei() 
    { 
     document.getElementById('tablei').style.display = 'none'; 
     document.getElementById('hidei').style.display = 'none'; 
     document.getElementById('showi').style.display = 'block'; 
    } 

i++; 

} 

我想知道我怎麼可以得到我變量的函數名以及的getElementById顯示。

+0

爲什麼要創建20個函數,當一個函數可以完成所有工作時執行相同的操作? – epascarello 2012-04-05 15:18:37

回答

2
function show(i) 
    { 
     document.getElementById('table' + i).style.display = 'block'; 
     document.getElementById('hide' + i).style.display = 'block'; 
     document.getElementById('show' + i).style.display = 'none'; 
    } 

    function hide(i) 
    { 
     document.getElementById('table' + i).style.display = 'none'; 
     document.getElementById('hide' + i).style.display = 'none'; 
     document.getElementById('show' + i).style.display = 'block'; 
    } 

這是更好地做一個功能,例如,您可以調用由「秀(1)」或「秀(42)」

+0

Thankyou soo大部分時間都是我的大腦2天的完美工作XD – SC7639 2012-04-05 15:25:58

0

你想使用字符串連接符「+」。

也就是說,你可以寫:

'table' + i 

,如果你通過我的不同值循環,你會得到變量名你想要的:

table0 
table1 
table2 
table3 
... 
0

我猜你想創建

show1(), show2(), show3(), etc... 

與此循環?就目前而言,您只需重複定義相同的功能即可。

您不能創建動態函數名稱,例如

function show + i() { ... } 

是不可能的。你可以用eval來僞造它:

eval('function show' + i + '() { ... }'); 

但是eval()是完全邪惡的,不應該被使用。

我建議以下變通,使用數組:

show = []; 
while(i < 20) { 
    show[i] = function() { ... } 
} 

show[7](); // execute the #7 function 

然而,這仍然是非常難看。爲什麼不簡單地通過i作爲參數?

function show(i) { 
    document.getElementById('table' + i).style.display = 'block'; 
} 

將完全符合您的要求,仍然只是一個單一的功能,而不是您想要定義的20+。