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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1658閲覧

チェックボックスがチェックされた時に背景色を変更したい

science_mac

総合スコア29

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/05/02 12:25

編集2018/05/09 07:11

チェックボックスにチェックを入れた時に、label属性の背景色を変更したいです。
現在、以下のような形で実装を試みています。

※label内のチェックボックスは複数実装しています。

PHP

1<div id="modal-content"> 2<input type="text" id="keyword" name="keyword" size="30" disabled="disabled"/> 3 <div id="material_select"> 4 <div class="all-container"> 5 <div id="check-label-container"> 6 <label class="check-label"> 7 <span>テスト1</span> 8 <input type="checkbox" name="check" value="テスト1"> 9 <span class="checkmark"></span> 10 </label> 11 </div> 12 </div> 13 </div> 14</div>

JavaScript

1<script> 2window.onload = function() { 3 var buttons = document.getElementById('material_select').getElementsByTagName('input'); 4 console.log('確認'); 5 for ( var i = 0; i < buttons.length; i ++ ) { 6 console.log(buttons[i]); 7 buttons[i].onclick = function() { 8 console.log('確認2'); 9 var keyword = document.getElementById('keyword'); 10 console.log('確認3'); 11 if(this.checked) { 12 keyword.value += this.value + " "; 13 console.log('確認4'); 14 buttons[i].parentNode.style.backgroundColor = '#CC28A8'; 15 } else { 16 keyword.value = keyword.value.replace(new RegExp(this.value + " ","g"),""); 17 } 18 } 19 } 20} 21</script>

コンソールでは確認4まで出力された後に、以下のメッセージが出力されています。

Uncaught TypeError: Cannot read property 'parentNode' of undefined at HTMLInputElement.buttons.(/anonymous function).onclick

getElementsByTagNameの戻り値がリストなのでparentNodeでは親要素を取得できていないのかなというところまでは何となく分かったのですが、どのように対処すれば良いのかがいまいち分かりません...

どなたかご教授お願い致します。

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

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

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

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

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

kei344

2018/05/02 12:28

関数ChangeColorを使用しているところを含めて提示してください。
m.ts10806

2018/05/02 20:54

ChangeColor() はどこで呼び出しているのでしょうか?
science_mac

2018/05/03 06:21

大変失礼しました、回答遅くなり申し訳ありません。 ChangeColor()についてはチェックボックスのonclickで呼び出していたので追記しました。 ただこれだとチェックを消した時にも反応しちゃうので良くないですね...
m.ts10806

2018/05/03 09:01

例えばonchangeとかでもチェック有無は判定しないといけないので同じです
m.ts10806

2018/05/03 09:02

あとデバッグを癖にしないと問題解決は遅くなるばかりです。質問せずに自身で完結できればそれに越したことはないですよね?
science_mac

2018/05/09 07:15

対応できておらず、大変申し訳ありません。質問内容の変更やデバック内容の追記などを実施したため、再度確認して頂けると嬉しいです。
kei344

2018/05/09 07:58

すでに付いている回答は確認されていますか?
science_mac

2018/05/09 08:11

すみません、確認して回答しました。少し実装変えてしまったため、ご指摘の方法ではうまく動かなくなってしまったので代替方法を考え中です。
guest

回答2

0

getElementsByTagName() の戻り値はリストなので、添字がないとダメなんじゃないかと。

javascript

1Myid=document.getElementById('material_select').getElementsByTagName('input')[0];

投稿2018/05/02 13:20

yhg

総合スコア2161

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

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

science_mac

2018/05/09 08:09

ご回答ありがとうございます。 実装方法を少し変えてしまった結果、教えていただいた方法ではそもそも動かなくなってしまいました。(コンソールで"確認"までしか表示されない) ですが、戻り値がリストであるということはかなり大きなヒントになりそうです。 ありがとうございます。
guest

0

ベストアンサー

iをonclick に登録した関数内で使用するにはいくつか方法はありますが、let i = 0;とするのが一番手っ取り早いのでそうしてあります。(ちなみにチェックボックスが外れたときに色を戻す処理は実装されていないままです)

JavaScript

1window.onload = function() { 2 var buttons = document.getElementById('material_select').getElementsByTagName('input'); 3 console.log('確認'); 4 for ( let i = 0; i < buttons.length; i ++ ) { 5 console.log(buttons[i]); 6 buttons[i].onclick = function() { 7 console.log('確認2'); 8 var keyword = document.getElementById('keyword'); 9 console.log('確認3'); 10 if(this.checked) { 11 keyword.value += this.value + " "; 12 console.log('確認4'); 13 buttons[i].parentNode.style.backgroundColor = '#CC28A8'; 14 } else { 15 keyword.value = keyword.value.replace(new RegExp(this.value + " ","g"),""); 16 } 17 } 18 } 19} 20```**動くサンプル:**[https://jsfiddle.net/wL8hgakj/](https://jsfiddle.net/wL8hgakj/)

投稿2018/05/09 09:23

kei344

総合スコア69407

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

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

science_mac

2018/05/09 10:06

ご回答及び対応についての指摘ありがとうございます。 期待通りの動きを実装できました。 ブロックスコープについては知識が足りておりませんでした。 今回の指摘を機に押さえておきたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問