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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

Q&A

解決済

2回答

636閲覧

JavaScriptのループでclickが機能しない

moto12

総合スコア15

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

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

0グッド

0クリップ

投稿2020/11/07 09:08

前提・実現したいこと

JavaScriptを用いて、解決ボタンをクリックしたら背景が赤くなるようにしたいです。
(5行目でエラーが出ているとは思うのですが具体的にどこがおかしいのか検討がつきません...)

イメージ説明

発生している問題・エラーメッセージ

【console】 Uncaught TypeError: goodAnswerButton.setAttribute is not a function at HTMLDivElement.<anonymous> (good_answer.js:5)

該当のソースコード

Javascript

1 2window.addEventListener("load", function(){ 3 const goodAnswerButton = document.getElementsByClassName('good-answer') 4 for (let i = 0; i < goodAnswerButton.length; ++i) { 5 goodAnswerButton[i].addEventListener("click", function(){ 6 goodAnswerButton.setAttribute("style", "background-color:#FFBEDA;") 7 }) 8 } 9})

Ruby

1【解決ボタン部分】 2 3<div class="good-answer" id="text-button"><p id="text">解決</p></div> 4

Javascript

1【application.js】 2 3require("@rails/ujs").start() 4// require("turbolinks").start() 5require("@rails/activestorage").start() 6require("channels") 7require("../good_answer") 8//= require jquery 9//= require_tree . 10

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

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

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

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

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

guest

回答2

0

getElementsByClassNameとfor文を一緒に使うことができないみたいです。以下のサンプルのようにquerySelectorAllを使用してみてはいかがでしょうか?

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7</head> 8<body> 9 <div class="good-answer" id="text-button"> 10 <p id="text">解決</p> 11 </div> 12 <div class="good-answer" id="text-button"> 13 <p id="text">解決</p> 14 </div> 15 <div class="good-answer" id="text-button"> 16 <p id="text">解決</p> 17 </div> 18 <script> 19 window.addEventListener("load", () => { 20 // @see https://qiita.com/naos_taira/items/929f9bbf46d4f61819ac 21 const goodAnswerButtons = document.querySelectorAll('.good-answer') 22 goodAnswerButtons.forEach(button => { 23 button.addEventListener('click', () => { 24 button.setAttribute('style', "background-color:#FFBEDA;"); 25 }) 26 }); 27 }) 28 </script> 29</body> 30</html>

投稿2020/11/07 09:59

kuro3

総合スコア27

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

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

moto12

2020/11/07 10:10

ご回答して頂きありがとうございます! 下に記述した方法で解決できました! kuro3さんにご教授頂いた内容は、今後参考にさせて頂きます。 ありがとうございました。
guest

0

ベストアンサー

goodAnswerButtonは配列なので、要素番号を指定する必要があります。

diff

1window.addEventListener("load", function(){ 2 const goodAnswerButton = document.getElementsByClassName('good-answer') 3 for (let i = 0; i < goodAnswerButton.length; ++i) { 4 goodAnswerButton[i].addEventListener("click", function(){ 5- goodAnswerButton.setAttribute("style", "background-color:#FFBEDA;") 6+ goodAnswerButton[i].setAttribute("style", "background-color:#FFBEDA;") 7 }) 8 } 9})

投稿2020/11/07 09:16

yuuyu

総合スコア1139

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

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

moto12

2020/11/07 09:52

[i]を付け加えたら無事に動きました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問