0

我写了一个代码来安排我一个点sinside表,但是当我指定arrayOfDivs时一切都很好:http: //jsfiddle.net/u58k6/6

var arrayOfDivs = [({topPosition : 99, leftPosition: 100}),({topPosition : 150, leftPosition: 400}),({topPosition : 578, leftPosition: 10})];

当我尝试基于其他事物动态创建此 arrayOfDivs 时,当我添加此代码以创建 arrayOfDivs 时:

var arrayOfDivs = [];

$("#table .draggable").each(function(index, item){
   var lat = $(item).attr("lat");
   var lng = $(item).attr("lng");
   var top = $(this).position().top;
   var left = $(this).position().left;
   arrayOfDivs.push({topPosition : top, leftPosition: left, lat : lat, lng : lng});
});

var height = $('table').height();
var rowsCount = $('table tr').length;
var ROW_HEIGHT = height/rowsCount;

最终版本: http: //jsfiddle.net/u58k6/10/,我只是在控制台中收到此错误:未捕获的类型错误:无法调用未定义的方法“推送”

为什么?问题是什么?

4

1 回答 1

1

arrayOfDivs正在成功创建。

TypeError发生在您的问题中未显示的行上。它在这里:

var rowNumber = Math.floor(position.topPosition / ROW_HEIGHT);
rows[rowNumber].push(position);

因为position.topPosition可以是负数,这意味着rowNumber可以是负数,这意味着您正在尝试做的事情rows[-1].push(position)本质上是undefined.push(position).

(在 the 之前添加一个console.log(rowNumber);语句.push(),您将看到 -1。)

当你硬编码时你没有这个问题,arrayOfDivs因为你指定的位置都不是负数。当您获得页面上实际元素的位置时,您可能会得到负数。

我没有关于如何解决这个问题的具体建议,因为我(还)不确定你实际上想要实现什么。但我希望这足以让你继续自己修复它。

于 2013-07-28T10:47:02.710 回答