2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[HTML / CSS / JavaScript]ラジオボタンみたいに複数のボタン(button)を1つだけ選択している状態にする

Last updated at Posted at 2023-04-15

この記事で書くこと

  • ラジオボタンみたいに複数のボタン(button)を1つだけ選択している状態にする

スクリーンショット 2023-04-15 16.32.47.png

スクリーンショット 2023-04-15 16.35.38.png

スクリーンショット 2023-04-15 16.35.55.png

ポイント

  • 画面を表示した際にボタンに対し 「ボタンをクリックした際に発火する関数」 を設定する
  • 任意のボタンをクリックした際に、一旦全てのボタンの 属性 data-pushed の値を false にする
  • クリックしたボタンの属性 data-pushed の値を true に変更する

コード

Sample.html
<html>
<head>
    <meta charset="UTF-8">
    <title>Sample</title>
    <style>
        div {
            position: relative;
            top: 100px;
            left: 20px;
        }
        button {
            width: 200px;
            height: 50px;
            border: 2px solid gray;
            border-radius: 5px;
        }

        button[data-pushed="true"] {
            background-color: gray;
            color: white;
        }

        button[data-pushed="false"] {
            background-color: white;
            color: gray;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded",() => {
            let buttons = document.querySelectorAll("button");
            buttons.forEach((button) => {
                button.setAttribute('onclick','push(this)');
            })
        });

        const push = (object) => {
            let that = object;
            let buttons = document.querySelectorAll("button");
            buttons.forEach(button => {
                button.dataset.pushed = "false";
            })
            document.getElementById(that.id).dataset.pushed = "true";
        }
    </script>
</head>
<body>
    <hedaer></hedaer>
    <div>
        <button id="buttonA" data-pushed="true">A</button>
        <button id="buttonB" data-pushed="false">B</button>
        <button id="buttonC" data-pushed="false">C</button> 
    </div>
    <footer></footer>
</body>
</html>

実行結果

ブラウザに表示した時の HTML コード
スクリーンショット 2023-04-15 16.38.20.png

ボタン B をクリックした際の HTML コード
スクリーンショット 2023-04-15 16.38.55.png

ボタン C をクリックした際の HTML コード
スクリーンショット 2023-04-15 16.41.06.png

ボタンを追加する時

  • ボタンを1つ追加する場合は、下記コードを1行追加すれば良い
  • ボタンの増加・減少に伴う JavaScript コードの編集が発生しない
  • idは既存のボタンと重複しないようにする
追加するコード
<button id="buttonD" data-pushed="false">D</button> 
<button id="buttonA" data-pushed="true">A</button>
<button id="buttonB" data-pushed="false">B</button>
<button id="buttonC" data-pushed="false">C</button>
+ <button id="buttonD" data-pushed="false">D</button> 

ボタン D を追加した際の HTML コード
スクリーンショット 2023-04-15 16.42.35.png

ボタン D をクリックした際の HTML コード
スクリーンショット 2023-04-15 16.43.28.png

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?