ボードゲームを作っています。ボードは試合が行われた後に動的に追加され、サイズは画面サイズに基づいて各プレーヤーごとに一意に決定されます。これはピースを適切に配置することを意味します。ボードが DOM のどこにあるかを知る必要があります。
$(document).on('click', '#boardOverlay', function(event){
event.preventDefault();
var offset = $(this).offset();
alert("offset.left: " + offset.left + " offset.top: " + offset.top );
var move = {};
var mouseX = event.pageX - offset.left;
var mouseY = event.pageY - offset.top;
move.Y = Math.floor(mouseX / board.piece_length);
move.X = Math.floor(mouseY / board.piece_length);
socket.emit('move', move, board.color);
});
アラートステートメントが実行される前に、Chrome がこのエラーをスローしています
> Uncaught TypeError: Cannot read property 'clientTop' of null jquery.min.js:4
私は何を間違っていますか?私はオフセットと位置の両方を調べましたが、オフセットは正しい選択だと思いますが、どちらにも運がありませんでした。
注:.on()
ボードを左上隅に置いたままにし、値を 0 と仮定するoffset.left
と、このoffset.top
関数は正常に機能するため、メソッドは機能しています。
更新:エラーをスローしているJQuery行は次のとおりです
clientTop = docElem.clientTop || body.clientTop || 0;
非縮小版の9264行目