質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

372閲覧

classを付与できない。オセロゲーム作成

kota_kota

総合スコア2

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/07/24 08:58

編集2022/07/24 10:22

問題点

オセロゲームを作っています。
具体的に起きている現象について
盤面をクリックした後、div要素に、class='shiro-koma'を付与できない。
エラーメッセージはありません。

気になる点について
下記の初期配置で設定した盤面の箇所はなぜか、 class='shiro-koma'を付与できる。

// 初期配置 function haichi() { let list_div = document.querySelectorAll("td div"); list_div[35].classList.add("shiro-koma"); list_div[28].classList.add("shiro-koma"); list_div[36].classList.add("kuro-koma"); list_div[27].classList.add("kuro-koma"); }

イメージ説明

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>オセロ</title> 7 <link rel="stylesheet" href="sample.css"> 8</head> 9<body> 10 <div class="contents"></div> 11 <script src="sample.js"></script> 12</body> 13</html>

css

1 2.contents { 3 width: 500px; 4 height: 500px; 5 background-color: forestgreen; 6} 7 8.list { 9 display: flex; 10 align-items: center; 11 height: 500px; 12} 13 14table { 15 width: 90%; 16 margin: 0 auto; 17 border-collapse: collapse; 18 border-spacing: 1px; 19} 20 21table tr td { 22 height: 50px; 23 border: 3px solid black; 24 width: 50px; 25 height: 50px; 26} 27 28.shiro-koma { 29 background-color: white; 30 border-radius: 50px; 31 width: 50px; 32 height: 50px; 33} 34 35.kuro-koma { 36 background-color: black; 37 border-radius: 50px; 38 width: 50px; 39 height: 50px; 40} 41

javascript

1 2// 初期盤面 3 4let contents = document.querySelector('.contents'); 5 6window.onload = function banmen() { 7 let banmen = document.createElement('div'); 8 let list_table = document.createElement('table'); 9 10 11 banmen.classList.add('list'); 12 contents.appendChild(banmen,contents); 13 banmen.appendChild(list_table,banmen); 14 15 for(let i=0;i<=7;i++){ 16 let list_tr = document.createElement('tr'); 17 list_table.appendChild(list_tr); 18 19 for(let a=0;a<=7;a++){ 20 let list_td = document.createElement('td'); 21 list_tr.appendChild(list_td); 22 let div = document.createElement('div'); 23 list_td.appendChild(div); 24 } 25 } 26 haichi(); 27 click(); 28} 29 30// 初期配置 31function haichi() { 32 let list_div = document.querySelectorAll("td div"); 33 list_div[35].classList.add("shiro-koma"); 34 list_div[28].classList.add("shiro-koma"); 35 list_div[36].classList.add("kuro-koma"); 36 list_div[27].classList.add("kuro-koma"); 37} 38 39// クリックして自分のコマを置いた時 40function click() { 41 let list_div = document.querySelectorAll("td div"); 42 list_div.forEach(function(item){ 43 item.addEventListener("click", function(){ 44 item.classList.add("shiro-koma"); 45 }) 46 }) 47} 48 49// 相手が自分のコマを置いたとき 50function 相手がコマを置く時() { 51 52} 53 54// 勝敗判定 55function 勝敗判定() { 56 57} 58

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kota_kota

2022/07/24 09:58

承知しました。 具体的に起きている現象について 盤面をクリックした後、div要素に、class='shiro-koma'を付与できない。 エラーメッセージはありません。 気になる点について 下記の初期配置で設定した盤面の箇所はなぜか、 class='shiro-koma'を付与できる。 // 初期配置 function haichi() { let list_div = document.querySelectorAll("td div"); list_div[35].classList.add("shiro-koma"); list_div[28].classList.add("shiro-koma"); list_div[36].classList.add("kuro-koma"); list_div[27].classList.add("kuro-koma"); }
m.ts10806

2022/07/24 10:05

質問は編集できます。
m.ts10806

2022/07/24 10:06

あわせてタイトルも要件を書くようにしてください。 現状のタイトルだと何が問題か分かりません(中身がないという意味)
guest

回答2

0

td内のdiv要素の高さが0pxになっておりクリックできる領域が存在しないからです。
高さを100%にしてください。

javascript

1div.style.height = "100%"; 2list_td.appendChild(div);

投稿2022/07/24 10:18

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kota_kota

2022/07/24 10:28

RiaFeed様 ご回答頂き、 ご丁寧に有難う御座いました。
guest

0

ベストアンサー

item.addEventListener("click", function(){ item.classList.add("shiro-koma"); })

このfunctionの中にconsole.log()など入れてみるとわかると思うのですが、
そもそもitemに対するclickイベントが発火していません。
それはなぜか。
イメージ説明

上記のようにheightが0だからです。
これではクリックできません。

table tr td div
に対してwidth,heightを明示してあげると(とりあえず100%)
クリックイベントが発生し、白丸がつきました。

投稿2022/07/24 10:18

m.ts10806

総合スコア80842

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kota_kota

2022/07/24 10:28 編集

m.ts10806様 何から何まで有難う御座いました。 解決しました。 大変わかりやすかったです。
m.ts10806

2022/07/24 10:59

デバッグや検証の仕方も併せて覚えましょう。 それだけで自分で解決できるようになります。 今回は「どこまで通ってるか」を確認できれば仮説を幾つか立てられるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問