3

JavaScript でKnight's Tourゲームを作成しました。ここで試すことができます。(特にエラー再現用)

読み取りを見つけるのに非常に苦労しているエラー

キャッチされていない TypeError: 未定義のプロパティ 'innerHTML' を読み取れません

しかし、なぜ未定義なのかわかりません。私は64セルのテーブルを持っています(チェス盤を作っています)。それらはすべてプレーンで空のように構築されています

<table border=1 style="border: 1px solid black; table-layout: fixed;">
  <tr>
    <td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
  </tr><tr>
    ...

これは、ページ上の唯一の表です。JavaScript を使用してすべての td 要素を取得し、ゲームプレイ用に ID、クラス、背景色、および onclick eventListeners を追加することを繰り返します。

var tds;
window.onload = function() {
    tds = document.getElementsByTagName("td");
    for (var i = 0; i < tds.length; i++) {
        if (typeof window.addEventListener === 'function') {
            (function (td) {
                ...
                td.addEventListener('click', function() {
                    ...

このエラーが繰り返し発生するセルがいくつかあるようです。個々のセルでエラーを生成できる場合もあれば、できない場合もあります。再現可能な例の 1 つは、一番下の行で最初に移動し、最後から 2 番目のセルに移動してから、横に沿って 2 つ上に 1 つ右のセルに移動しようとすることです。

onclick 内で innerHTML 属性を頻繁に読み取ります。td 要素のグローバル tds 配列を参照します。これは基本的に、それらにアクセスする私のすべての形態です。

if (tds[cell].innerHTML === "") {
if (tds[n].innerHTML === "♞") {
tds[cell].innerHTML = "♞";
tds[target].innerHTML = "♘";
td.innerHTML = "♞";

var を使用して変数を宣言する場合と使用しない場合の違いについて読んでいたときに、それを理解したと本当に思っていましたが、このエラーの原因となっている単一の var を理解できませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

1

問題は、nその時点で 64 に等しいことです。配列の全長tdsは 64 (または 0 から 63) であり、n表す要素が配列の範囲外であるため、エラーが生成されます。

于 2013-09-06T14:06:38.677 に答える