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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

JavaScript

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

Q&A

解決済

2回答

3075閲覧

JavaScriptでclickが反応しない

moto12

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

JavaScript

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

0グッド

0クリップ

投稿2020/11/07 07:57

前提・実現したいこと

JavaScriptを用いて、解決ボタンをクリックしたら文字が赤くなるようにしたいです。
サイトなどを参考にコードを記述したのですが、何が間違っているのか分からないです。
(4行目でエラーが出ているとは思うのですが具体的にどこがおかしいのか検討がつきません...)

【イメージ画像(Gyazo)】
https://gyazo.com/2d7d47b45e19a9d56eafc25199684690

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

【console】 Uncaught TypeError: goodAnswerButton.addEventListener is not a function at good_answer.js:4

該当のソースコード

Javascript

1window.addEventListener("load", function(){ 2 const goodAnswerButton = document.getElementsByClassName('good-answer') 3 4 goodAnswerButton.addEventListener('click', function(){ 5 goodAnswerButton.removeAttribute("style", "color:red;") 6 }) 7})

Ruby

1【解決ボタンのあるページのビューファイル】 2 3<div class="comment"> 4 <div class="comment-box"> 5 <%= form_with model:@response,url:comment_responses_path(@comment),local: true do |f| %> 6 <%= f.text_area :response_text, placeholder: "質問する", class: "comment-text" %> 7 <%# <%= hidden_field_tag :comment_id,@comment.id %> 8 <p class="comment-warn"> 9 <p>他の生徒の質問で回答できる場合には積極的に回答してください!</p> 10 </p> 11 <br> 12 <%= f.submit "質問する",class: "comment-btn"%> 13 <div class="back-to-top2"><%=link_to '戻る', root_path %></div> 14 <% end %> 15 </div> 16 17<div class="comment-box2"> 18 <h4 class="comment-list"><質問一覧></h4> 19 <% if @responses %> 20 <% @responses.each do |response| %> 21 <div class="comment-content2"> 22 <% if current_user.genre == "教員" %> 23 <p> 24 <strong><%= link_to response.user.name, "#", class: "comment-nickname" %></strong> 25 </p> 26 <% elsif current_user.genre == "生徒" %> 27 <strong class= "comment-nickname">匿名</strong> 28 <% end %> 29 <p class="comment-texts"> 30 <%= response.response_text %> 31 </p> 32 33 <ul class="comment-time"> 34 <p class="time"><%= response.created_at.to_s(:datetime_jp) %></p> 35 <p class="time"><%= response.created_at.to_s(:datetime_jp2) %></p> 36 </ul> 37 <% if current_user.genre == "教員" %> 38 <p> 39 <%= link_to comment_response_path(@comment.id, response.id), method: :delete, class: "delete-button" do %> 40 <i class="fas fa-trash"></i> 41 <% end %> 42 </p> 43 <% elsif user_signed_in? && current_user.id == response.user_id %> 44 <p> 45 <%= link_to comment_response_path(@comment.id, response.id), method: :delete, class: "delete-button" do %> 46 <i class="fas fa-trash"></i> 47 <% end %> 48 </p> 49 <% end %> 50 <p> 51 <div class="good-answer" id="text-button"><p id="text">解決</p></div> 52 </div> 53 <% end %> 54 <% end %> 55 </div> 56 </div>

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ページで確認できます。

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

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

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

m.ts10806

2020/11/07 08:09

画像はteratailの画像アップロードを利用してください。 あと、実際のコード以外の情報は基本的にcode内に含めないようにしてください。 あと、コード的にはNode.jsのものかと思います。タグに追加願います。
guest

回答2

0

ベストアンサー

非常によく出る質問です。
getElement"s"ByClassNameというメソッド名が示す通り、取得できる情報は単数ではなく複数です。

Document.getElementsByClassName()

指定されたクラス名をすべて持つすべての子要素の配列風オブジェクトを返します

const goodAnswerButton = document.getElementsByClassName('good-answer') console.log(goodAnswerButton )

のようにするとどういう形で要素が取得できるか分かります。

このような「配列風オブジェクト」として取得された要素群に対してイベントを当てたい場合、取得後、ループを利用するなどして個々の要素にaddEventしていく必要があります。

投稿2020/11/07 08:12

m.ts10806

総合スコア80859

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

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

moto12

2020/11/07 09:56

丁寧にありがとうございました。 おかげで解決しました。 指摘して頂いた点、今後は気をつけます。
guest

0

以下の通りfor文を用いて一つずつ値を取り出すことで解決しました。

Javascript

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[i].setAttribute("style", "background-color:#FFBEDA;") 6 }) 7 } 8})

投稿2020/11/07 09:55

moto12

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問