错误:无法读取未定义的属性
2014-03-18
1473
我似乎无法修复此问题。我的代码如下:
var matrix = [];
// initialise the grid:
window.onload = function(){
var cells ='';
for(var i = 0; i < 10; i++){
matrix[i] = [];
for (var j = 0; j < 10; j++){
matrix[i][j] = "white";
cells += "<span class = 'cell' id='cell"+ i + "" + j + "' onClick = 'toggleCell("+i+","+j+")' ></span>";
}
}
$('#grid-container').html(cells);
}
当我尝试在其他方法中调用矩阵元素时,我得到了未定义的结果。
已解决
- 稍后尝试访问无效位置的对象。
3个回答
未定义的不是矩阵,而是矩阵[i]。由于您是从 jQuery 的属性方法获取 i 和 j 值,因此它们是字符串;因此在将它们用作数组的索引之前,您必须先将它们转换为整数:
var i = parseInt($(this).attr('id').slice(-2, -1), 10);
var j = parseInt($(this).attr('id').slice(-1), 10);
还请注意,我将第二个参数传递给第一个切片调用,因为您只需要第一个字符。
76484
2014-03-18
matrix
是一个长度为 9 的数组,但您的 for 循环要进行 10 次 (
i < 10
)。将您的循环更改为类似以下内容:
for( var i = 0; i < matrix.length; i++) {
}
Fizz
2014-03-18
@Patrick Evans 是对的。jQuery document ready 函数不需要包装在 window.onload 事件中。此外,如果您有任何在 window.onload 之前触发的代码(因为 document.ready 首先触发),那么数组将不会被填充。@falinsky 使用 var matrix = []; 也是正确的。另请查看此答案,了解 [] 和 new Array() 之间的区别 https://stackoverflow.com/a/1273936/2488939
The Mahahaj
2014-03-18