1

javascript で地雷原ゲームを作成しようとしています。

clear ro**wをクリックすると、「passed」と表示されますが、「died」と表示されることもあれば、**mined 行をクリックすると「passed」と表示されることもあります。クリアで「合格」、採掘された行で「死亡」のみを与えるはずです。

理由がわかりません..

見えましたか?

これまでの私のコードは次のとおりです。

  var level = 9;

   // create the table
  var body = document.getElementsByTagName("body")[0];
  var tbl = document.createElement("table");
  tbl.setAttribute('id', 'myTable');
  var tblBody = document.createElement("tbody");



   //Create 2d table with mined/clear
  for (var i = 1; i <= 10; i++) {
      var row = document.createElement("tr");
      document.write("<br/>");

      for (var x = 1; x <= 10; x++) {
          var j = Math.floor(Math.random() * 50);

          if (j <= 15) {
              j = "mined";
          } else {
              j = "clear";
          }
          var cell = document.createElement("td");
          var cellText = document.createTextNode(j + "");
          cell.appendChild(cellText);
          row.appendChild(cell);

      }
      tblBody.appendChild(row);
  }
  tbl.appendChild(tblBody);
  body.appendChild(tbl);
  tbl.setAttribute("border", "1");


   //Check which row is clicked

  window.onload = addRowHandlers;

  function addRowHandlers() {
      var table = document.getElementById("myTable");
      var rows = table.getElementsByTagName("td");
      for (p = 0; p < rows.length; p++) {
          var currentRow = table.rows[p];
          var createClickHandler = function (row) {
              return function () {
                  var cell = row.getElementsByTagName("td")[1];
                  var id = cell.innerHTML;
                  if (id == "mined") {
                      alert("Died");
                  } else {
                      alert("Passed!");
                  }
              };
          }

          currentRow.onclick = createClickHandler(currentRow);
      }
  }

JSFiddle ここ: http://jsfiddle.net/blowsie/ykuyE/

前もって感謝します!

4

1 に答える 1

2

この行は、誤った動作を引き起こします。var cell = row.getElementsByTagName("td")[1];クリックが行われるたびに、[1]実際にクリックされたセルに関係なく、列の 2 番目のセルが選択されます。

あなたのフィドルを修正しました: http://jsfiddle.net/ykuyE/1 テーブルが作成されると、 onclick ハンドラーが個々のセルに直接適用されるようになりました。

cell.onclick = function() {
    if (this.innerHTML == "mined") {
        alert("Died");
    } else {
        alert("Passed!");
    }
}
于 2013-05-28T07:16:18.463 に答える