バトルシップというゲームをJavaScriptで作成しています。
index.html内で作成した表をクリックした際に座標を特定し、別ファイルの関数内で使用したいのですが、
Uncaught TypeError: Cannot read property '2' of undefined エラー
ウェブ上でセルをクリックするというエラーがコンソール内に出ます。
listeners.js内の
JavaScript
1console.log($inputCol); 2console.log($inputRow); 3console.log($coordinates);
は正常にクリックした箇所の数値が表示されます。
以下が関係しているコードです。
Javascript
1//listeners.js 2document.querySelector("#field tbody").addEventListener('click', e => { 3 console.log("Table was clicked on"); 4 5 var tableElement = e.target; 6 7 var $inputCol = parseInt(tableElement.cellIndex - 1); 8 var $inputRow = parseInt(tableElement.parentNode.rowIndex - 1); 9 10 console.log($inputCol); 11 console.log($inputRow); 12 13 var $coordinates = "" + $inputRow + ',' + $inputCol + ""; 14 console.log($coordinates); 15 16 17 battleship.makeMove($coordinates); 18});
javascript
1//models.js 2var battleship = { 3 4 board : [], // name the board 5 6 initialize : function(board){ 7 var size = 10; 8 board = new Array(size) 9 for (var i = 0; i < size; i++){ 10 this.board[i] = Array(size); 11 } 12 13 return this.board; 14 }, 15 16makeMove : function(coordinates){ 17 18 var indexNum = coordinates.split(','); 19 var x = indexNum[0]; //row number 20 var y = indexNum[1]; //column number 21 22 if (this.board[x][y] == null){ 23 24 document.getElementById('message').innerHTML = "Missed"; 25 26 27 } else if (this.board[x][y] !== null) { 28 29 if (this.board[x][y] !== "c"){ 30 31 document.getElementById('message').innerHTML = "Hit Cruiser"; 32 33 } else if (this.board[x][y] !== "s"){ 34 35 document.getElementById('message').innerHTML = "Hit Submarine"; 36 37 } else if (this.board[x][y] !== "d"){ 38 39 document.getElementById('message').innerHTML = "Hit Destroyer"; 40 41 } else if (this.board[x][y] !== "b"){ 42 43 document.getElementById('message').innerHTML = "Hit Battleship"; 44 45 } 46 } 47 }, 48};
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。