2

嗨我有一个while循环:

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++;

}

我想知道如何让 i 变量显示在函数名称和 getElementById 中。

4

3 回答 3

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';
    }

最好创建一个函数,例如“show(1)”或“show(42)”

于 2012-04-05T14:58:54.467 回答
0

您想使用字符串连接运算符“+”。

也就是说,你可以写:

'table' + i

如果你遍历不同的 i 值,你会得到你想要的变量名:

table0
table1
table2
table3
...
于 2012-04-05T15:01:43.297 回答
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

However, this is still very ugly. Why not simply pass i as a parameter?

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

will do exactly what you want, and still be only one single function, not the 20+ you're trying to define.

于 2012-04-05T15:03:19.180 回答