我正在尝试在for循环中动态创建变量,但是出现了错误。我的目标是:获取32个文本字段的值,并尝试将这些值存储到一个变量中。
for (i = 1; i<=32;i++){
q[i] = document.getElementById('qty[i]').value;
}
但这会产生以下结果:
错误:'q'未定义
我正在尝试在for循环中动态创建变量,但是出现了错误。我的目标是:获取32个文本字段的值,并尝试将这些值存储到一个变量中。
for (i = 1; i<=32;i++){
q[i] = document.getElementById('qty[i]').value;
}
错误:'q'未定义
var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById('qty[i]').value;
}
q
将包含所有值。你应该在for循环之外声明数组q
,因为这是常见的最佳实践。如果你根本不声明q
,它将成为一个隐含的全局变量,这是你可能要避免的。如果你在循环内部声明q
,它将在每次迭代中被覆盖,所以你需要确保你在外部声明它。
此外,你会注意到我将你的for
循环改为了这样:
for(i = 1; i <= 32; i++) {
变成这样:
for (var i = 0; i < 32; i++){
for
循环也需要从零开始计数,并以31结束。 此外,你需要在for循环中声明变量i
; 否则,它将成为全局变量。
q
,你可以像Kirian演示的那样; 也就是说,使用一个if
语句来确定是否已经声明了q
,如果没有,则声明它。 它会像这样:for (var i = 0; i < 32; i++){
if(!q) q = [];
q[i] = document.getElementById('qty[i]').value;
}
qty
是一个数组,那么你可能想要使用以下代码:var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById(qty[i]).value;
}
qty
是一组看起来像qty[1]、qty[2]、qty[3]...
的ID中的一部分,那么你需要用这个代码:var q = [];
for (var i = 0; i < 32; i++){
q[i] = document.getElementById('qty[' + i + ']').value;
}
id="qty[i]"
的元素,否则这仍然可能无法正常工作。但从 OP 中并不完全清楚它应该是什么。 - Chuckdocument.getElementById('qty[' + i + ']')
这样的代码可以解决问题。 - Thomas Jones你尝试过了吗:
var q = [];
for (var i = 0; i < 32; i++){
q.push(document.getElementById('qty[i]').value);
}
q.push(x)
语法将 x 添加到数组的末尾。
q.push
呢?q[i]
也可以正常工作。 - Elliot Bonnevilleq.push
是更好的做法,也是面向对象的,除非索引很重要。 - Thomas Jonespush
,但你说的并不完全准确。length
只是一个特殊属性,它等于最高索引加 1。JavaScript 中的数组是稀疏的,所以那些其他索引只是未定义的,而不是初始化的。 - Dennis(4-1)*2
考虑了计算中大小字节的差异。 - Dennis