LoginSignup
0
0

【JavaScript】テーブルの各行にあるボタンを押すとそのほかのボタンが非活性になるコード

Posted at

テーブルのDOM操作極めてますか?

よくあるのがテーブルの各行にボタンがあった時の操作です。
その時にDOMについて知らないと積みます。

テーブルの中のボタンを取得しそのボタンを配列として処理、各ボタンにクリックイベントをバインディング

以下のソースコードをコピペすると各行にボタンが配置された表を表示します。
ボタンを押すとテーブルにあるそのほかのボタンが非活性になります。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Table with Edit Buttons</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th, td {
            border: 1px solid black;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <table id="myTable">
        <thead>
            <tr>
                <th>Column 1</th>
                <th>Column 2</th>
                <th>Column 3</th>
                <th>Column 4</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Data 1</td>
                <td>Data 2</td>
                <td>Data 3</td>
                <td>Data 4</td>
                <td><button class="edit-btn">Edit</button></td>
            </tr>
            <tr>
                <td>Data 5</td>
                <td>Data 6</td>
                <td>Data 7</td>
                <td>Data 8</td>
                <td><button class="edit-btn">Edit</button></td>
            </tr>
            <tr>
                <td>Data 9</td>
                <td>Data 10</td>
                <td>Data 11</td>
                <td>Data 12</td>
                <td><button class="edit-btn">Edit</button></td>
            </tr>
            <tr>
                <td>Data 13</td>
                <td>Data 14</td>
                <td>Data 15</td>
                <td>Data 16</td>
                <td><button class="edit-btn">Edit</button></td>
            </tr>
        </tbody>
    </table>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const table = document.getElementById('myTable');
            const editButtons = table.getElementsByClassName('edit-btn');

            Array.from(editButtons).forEach(button => {
                button.addEventListener('click', function() {
                    // Disable all edit buttons
                    Array.from(editButtons).forEach(btn => {
                        btn.disabled = true;
                    });

                    // Enable only the clicked button
                    this.disabled = false;

                    // You can add your edit functionality here
                    console.log('Edit button clicked for row:', this.closest('tr').rowIndex);
                });
            });
        });
    </script>
</body>
</html>

1番上のボタンをクリックすると(どこでもいいですが)

image.png

そのほかの行にあるボタンが非活性になります。

image.png

Q.これはいったい何に役立つんですか?

それはこの記事を読んだあなたの想像力にお任せします。

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