1

我在这里做错了什么?

function F2()
{
    for(i = 1; i < 7; i++)
        {
        ('zone'+i+'Data') = ('1'+document.getElementById('Z'+i+'Operate').value +
        document.getElementById('Z'+i+'OnTimeH').value +
        document.getElementById('Z'+i+'OnTimeM').value +
        document.getElementById('Z'+i+'Duration').value +
        document.getElementById('Z'+i+'Repeat').value +
        document.getElementById('Z'+i+'Extra').value);

        ('op'+i).innerHTML = ('zone'+i+'Data');
        }
}

zone1Data、zone2Data 等在外部声明。如果我不运行循环并使用 zone1Data = 而不是 ('zone'+i+'Data') = 它可以正常工作,所以我认为我的语法有问题......而且可能也是最后一行也。

任何想法如何做到这一点?

4

1 回答 1

1
('zone'+i+'Data') =

是分配动态变量的无效方式

使用带有变量名的数组表示法来创建一个新变量

window['zone'+i+'Data'] = "something";
this['zone'+i+'Data'] = "something"
someOtherObject['zone'+i+'Data'] = "something";

然后你可以使用点符号来访问它

console.log( window.zone0Data );
console.log( this.zone0Data );
console.log( someOtherObject.zone0Data );

我会避免使用window它,因为那会污染全局命名空间

正如 Ingo Bürk 提到的,最好将它们放入一个数组中

var zoneData = new Array();

for(i = 1; i < 7; i++) {
   zoneData[i] = ('1'+document.getElementById('Z'+i+'Operate').value +
        document.getElementById('Z'+i+'OnTimeH').value +
        document.getElementById('Z'+i+'OnTimeM').value +
        document.getElementById('Z'+i+'Duration').value +
        document.getElementById('Z'+i+'Repeat').value +
        document.getElementById('Z'+i+'Extra').value);
}

并且每个区域数据都可以通过其索引访问

console.log(zoneData[1]);
console.log(zoneData[2]);
于 2013-09-22T14:27:08.400 回答