1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

干支を計算するJavaScript

Last updated at Posted at 2024-11-09

初めまして。独学でhtmlから始まりcss、JavaScript、PHP、mySQLとWEBフロントエンドをがんばっています。
独学でヒィヒィ言いながら学習する姿や、間違えてるポイントをアウトプットしていこうと思います。
初回は、JavaScriptで干支を計算するWEBアプリの話。まず、簡単に仕様を決めます。
・入力は西暦数字4桁
・配列に干支を入れて、入力された数字を12で割ってあまりで算出
(計算しやすく、配列に入れる干支は「申」から)
今回はJavaScriptの学習なのでhtmlは最低限のコードでOKってことにしました。
ちなみに、どういう間違えをしたか失敗コードが前半に出てきます。最後に一応成功したコードを載せます。

まず、すごい簡潔なhtml
※送信しないならformタグ不要のご指摘があったので、修正

eto.html
    <span class="text">干支を知りたい年を入力してください</span>
        <input type="number" value="2024" id="year">
        <input type="button" value="計算" id="btn">

    <p id="output"></p>

続いて、自分でなんとか考えたJavaScript。(間違ってます)

eto.js
        const etoList = ['','','','','','','','','','','',''];
        let btn = document.getElementById("btn");
        let year = document.getElementById("year");

        btn.addEventListener("click",function(){
            let eto = etoList[(year + 8) % 12];
            document.getElementById("output").textContent = '${eto}年です';
        })

結果はこちら。
スクリーンショット 2024-11-09 21.08.36.png
あれ?なんだっけ、定義すると変数みたいに代入してくれるアレが出ない。
文字が出てくるってことは、計算は実行されてるのかな?
というわけで、chromeの開発者ツールを見てみる。
スクリーンショット 2024-11-09 21.14.03.png
何にもわからない。。。
これを見てデバックできるのは、ある程度コードを読み書きできる人だと思い、諦める。
ボタンを押したら、イベント発火って考えでいいはずなんだけどなー、何がおかしいのかなぁ。

あ!数字を入力してからyearの数字読み取るのかな?イベントリスナーの中に入れてみたらどうだろう。

eto.js
        const etoList = ['','','','','','','','','','','',''];
        let btn = document.getElementById("btn");
        
        btn.addEventListener("click",function(){
            let year = document.getElementById("year");
            let eto = etoList[(year + 8) % 12];
            document.getElementById("output").textContent = '${eto}年です';
        })        

何も変わらず。
そもそも、yearに、id="year"を代入するだけじゃ、入力された数字を読み込んでないのでは?(実行されてるかどうかがわからない…)
ということで、調べてみると、id拾った後に、.valueつけるといいらしい。

eto.js
        const etoList = ['','','','','','','','','','','',''];
        let btn = document.getElementById("btn");


        btn.addEventListener("click",function(){
        let year = document.getElementById("year").value;
        alert(year);
        }
        );

ちょっとわかんなすぎたので、alart出して、確認してみる。
入力結果は反映されてるっぽい。
うーん、何がおかしいのかなぁ。わからなさすぎるので、chatGPT先生に助けを求める。
スクリーンショット 2024-11-09 21.53.00.png
な、なんと!バッククォート!
というわけで、修正。

eto.js
        const etoList = ['','','','','','','','','','','',''];
        let btn = document.getElementById("btn");
        
        btn.addEventListener("click",function(){
            let year = document.getElementById("year").value;
            let eto = etoList[year % 12];
            document.getElementById("output").textContent = `${eto}年です`;
        })

スクリーンショット 2024-11-09 21.54.58.png
できた!
今年、辰年だったんですね、忘れていました。
chatGPT先生に最初から模範コードを教えてもらっちゃうと、${hoge}はバッククォートで囲まないといけないことに気づかなかったので、まずは自分で書いてみてレビューしてもらうのはなかなかいいんじゃないかと思ったのでした。
小さな一歩でも、できると楽しいですね。学習とアウトプットを続けたいです。ではまた!

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?