Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
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

Posted at

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

まず、すごい簡潔なhtml

eto.html
    <span class="text">干支を知りたい年を入力してください</span>

    <form accept="#" id="form">
        <input type="number" value="2024" id="year">
        <input type="button" value="計算" id="btn">
    </form>

    <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}はバッククォートで囲まないといけないことに気づかなかったので、まずは自分で書いてみてレビューしてもらうのはなかなかいいんじゃないかと思ったのでした。
小さな一歩でも、できると楽しいですね。学習とアウトプットを続けたいです。ではまた!

0
0
1

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
copepan

@copepan(copepan)

フロントエンド出身の駆け出しエンジニアです。html,cssから入り現在PHP,javascript,mySQLなどを勉強中。モチベーション維持のため、発信できればと思います。

Comments

eufss0183
@eufss0183

データを送信しないのならform要素は不要です。

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

<script>
btn.addEventListener('click', () => output.textContent = `${'申酉戌亥子丑寅卯辰巳午未'[year.value % 12]}年です`);
</script>
0

Let's comment your feelings that are more than good

Qiita Conference 2024 Autumn will be held!: 11/14(Thu) - 11/15(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

Takahiro Anno, Masaki Fujimoto, Yukihiro Matsumoto(Matz), Shusaku Uesugi / Nicolas Ishihara(Vercel Inc.)

View event details

Being held Article posting campaign

0
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?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address