LoginSignup
1
0

More than 3 years have passed since last update.

クリックするとボタンのvalue属性を変更するDOM

Last updated at Posted at 2019-06-01

おはこんばんちわ。
気付いたら厄過ぎてた、プログラミング初学者のオジサンです。

現在、JavaScriptでミニアプリを作成しています。
そのアプリでは、クリックするとそのボタンのvalue属性を変更させる機能があります。

今回はボタンをクリックすると、「O」が「X」に、「X」が「O」に変わるコードを作ってみました。

1.HTML(index.html)

今回はボタンをDOMで作ります。
そのため、bodyタグの中にはJavaScriptを呼び出すscriptタグしかありません。
このようなコードばっかり書いてたおかげか、だいぶDOMを理解できるようになりました。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>クリックしたボタンのvalueを変える</title>
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>
  <script src="js/main.js"></script>
</body>
</html>

2.CSS(css/styles.css)

なくてもいいのですが、テストするときの見やすさが欲しいので、少しボタンの体裁を整えました。

/* ボタンの体裁を整える */
input {
  display: flex;
  margin: 10px;
}

3.JavaScript(js/main.js)

最初のパラグラフはDOMでinputタグを作ってます。
createElement()でinputタグを作り、setAttribute()でtype属性とvalue属性を付け、最後にappendChild()でbodyタグの子要素に入れてます。これをfor文で4回繰り返し。
なお、初期設定としてボタンは「O」にしています。

  // Aボタンを4つ作り、bodyタグの子要素に入れます
  for (let i = 0; i < 4; i++) {
    const input = document.createElement('input');
    input.setAttribute('type','button');
    input.setAttribute('value','O');
    document.body.appendChild(input);    
  }

次のパラグラフでボタンを変えるコードを書いてます。
まず、querySelectorAll()を使って、inputのNodeListを取得します。
そしてfor文を使って、クリックされたNodeを探すaddEventListenerを入れました。
その後、if文でクリックされたNodeのvalue属性によってボタンを切り替えるコードを書いています。

  // ボタンがAならBに、BならAならにします
  const input = document.querySelectorAll('input');
  for (let i = 0; i < input.length; i++) {
    input[i].addEventListener('click', ()=> {
      if (input[i].value == 'O') {
        input[i].value = 'X';
      } else {
        input[i].value = 'O';
      }
    });
  }

4.最後に

うまくコードの説明ができていないところがあるかもしれないので、後で見直そうと思います。
もし、分かりにくいところがありましたら、ご指摘いただきますと助かります。

拙文に最後までお目通しいただき、ありがとうございました!

1
0
0

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