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/、コンソールに次のエラーが表示されます: Uncaught TypeError: Cannot call method 'push' of undefined

なんで?問題は何ですか?

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).

(の直前にステートメントを追加するconsole.log(rowNumber);.push()と、-1 が表示されます。)

arrayOfDivs指定した位置が負ではないため、をハードコードする場合、この問題は発生しません。ページ上の実際の要素の位置を取得するときに、負の数が得られることがあります。

あなたが実際に何を達成しようとしているのか(まだ)わからないので、これを修正する方法について具体的な提案はありません。しかし、それで十分であることを願っています。

于 2013-07-28T10:47:02.710 に答える