Rumah > Soal Jawab > teks badan
P粉0217082752023-09-04 12:01:27
Anda perlu mengulangi setiap petak kerana querySelectorAll mengembalikan berbilang nod dan anda tidak boleh menambah pendengar acara secara langsung padanya kerana addEventListener hanya boleh berfungsi pada satu nod pada satu masa.
Saya juga menambahkan beberapa CSS pada coretan kod di bawah supaya anda dapat melihatnya berfungsi apabila anda menjalankannya. Abaikan ini dalam projek akhir.
window.onload = () => { const squares = document.querySelectorAll(".square") let currentPlayer = "X"; squares.forEach(square => { square.addEventListener("click", () => { if (square.innerHTML === "") { square.innerHTML = currentPlayer; currentPlayer = currentPlayer === "X" ? "O" : "X"; } }); }); }; document.querySelector('#reset-btn').addEventListener('click', () => { document.querySelectorAll('.square').forEach(square => { square.innerHTML = ""; }); });
#board { margin: 0 auto; width: 50%; } .row { display: grid; grid-template-columns: 1fr 1fr 1fr; } .square { border: 1px solid black; padding: 1rem; cursor: pointer; text-align: center; aspect-ratio: 1/1; display: flex; align-items: center; justify-content: center; } .square:hover { background-color: #CCCCCC; }
<body> <div id="board"> <div class="row"> <div class="square"></div> <div class="square"></div> <div class="square"></div> </div> <div class="row"> <div class="square"></div> <div class="square"></div> <div class="square"></div> </div> <div class="row"> <div class="square"></div> <div class="square"></div> <div class="square"></div> </div> <button id="reset-btn">RESET</button> </div> </body>
Edit: Saya menukar coretan kod di atas kepada Ganti pada klik, yang boleh digunakan dengan memulakan pembolehubah dengan pemain semasa (X atau O) dan menukar klik menggunakan pernyataan ternary yang mudah. Saya juga menambah fungsi pada butang set semula anda!