@scythercas

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

表のセルをクリックしたらalertが出るようにしたい

まるばつゲームを作成している途中です。
表のどれかのセルをクリックしたらalert("cellをクリックしました。")が表示されるようにしたいです。
エラーが起きてしまい、表すら表示されません。
どなたかご教授お願いいたします。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        #gameTable {
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <h1>まるばつゲーム</h1>
    <p>マークを選択してから、盤面をクリック!</p>
    <input id="maru" type="button" value="〇" onclick=which(maru)>
    <input id="batu" type="button" value="✕" onclick=which(batu)>
    <br>
    <br>
    <div id="field">

    </div>
    <p id="inputWhich"></p>
<script>
    let i, j;
    let tbl = document.createElement("table");
    tbl.border="1";
    tbl.className="gameTable";
    for(i=0;i<=2;i++){
        let tr = document.createElement("tr");
        for(j=0;j<=2;j++){
            let td = document.createElement("td");
            td.id="cell"+i+j;
            td.height="50px";
            td.width="50px";
            td.onclick=inputMark();
            tr.appendChild(td);
        }
        tbl.appendChild(tr);
    }
    document.getElementById("field").appendChild(tbl);

    const which=(a)=>{
        let tx;
        if(a==maru){
            tx = "";
        }else if(a==batu){
            tx = "";
        }
        document.getElementById("inputWhich").innerText = tx + "を入力します。";
    }
    const inputMark=()=>{
        alert("cellをクリックしました。");
    }
</script>
</body>
</html>
0 likes

1Answer

エラーが起きている場合は、エラーの内容まで記載していただければ回答者も回答しやすくなると思います。
ぜひエラーの内容まで詳細に記載していただければと思います。

今回のエラーは、以下のような内容でした。
Cannot access 'inputMark' before initialization

これはonclickイベントに紐づける際に、まだ「inputMark」が定義されていないため起きているエラーです。
inputMarkを定義する位置を変えることでエラーを解消することができました。

また、前回の質問の際にも起きていましたが、イベントにバインドする際に関数名に()をつけてしまうと、その関数を呼んだ戻り値を紐づけしてしまうことになります。
ご注意ください。

- td.onclick=inputMark();
+ td.onclick=inputMark;

See the Pen Untitled by yotty (@yotty) on CodePen.

また、elm.onclick = func;というような割付方法は現在では古い書き方とされ、あまり推奨されていないようです。

1Like

Comments

  1. @scythercas

    Questioner

    前回に引き続き大変丁寧なご回答ありがとうございます!解決しました。
    エラーの内容の未記載、気をつけます。

Your answer might help someone💌