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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Ruby on Rails

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

2回答

1358閲覧

javascriptでIDが付与されているのに処理されない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Ruby on Rails

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2020/10/16 10:29

前提・実現したいこと

現在javascriptで、クリックしたときに色を変えたり要素を削除する処理を追加しています。
アプリの概要としては、追加したメモを非同期で1回目のクリックで色を変えて、2回目のクリックで削除する形です。

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

HTMLをIDで取得しているのですが、要素が複数存在するときに一番上の要素のみが処理され、その下以降の要素に反応しません。検証ツールで確認しましたがID自体はきちんと入っています。なぜ一番上以外は処理が行われないのでしょうか?
以下動作の様子を載せます。
https://gyazo.com/57a05d1738d333f219f90dad1cc9da8c

### 該当のソースコード

ruby

1window.addEventListener('load', function(){ 2 const changeCollorBotton = document.getElementById("lists") 3 4 changeCollorBotton.addEventListener('click', function(){ 5 changeCollorBotton.setAttribute("style", "background-color:#808080;") 6 7 const element = document.querySelector('section') 8 changeCollorBotton.addEventListener('click', function(){ 9 element.remove() 10 }) 11 }) 12})

ruby

1<div class="memos"> 2 <% @memos.each do |memo| %> 3 <section> 4 <div class="memo" id="lists"> 5 <div class="memo-item"><%= memo.item %></div> 6 <div class="memo-text"><%= memo.text %></div> 7 </div> 8 </section> 9 <% end %> 10</div>

試したこと

プログラミング初心者ですので、足りないコードや情報があれば教えてください。
###バージョン
ruby '2.6.5'
gem 'rails', '~> 6.0.0'
gem 'mysql2', '0.5.3'

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

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

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

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

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

guest

回答2

0

ベストアンサー

  • getElementById は単体ノードを取得するメソッドであり、最初に出現した要素ノードを返す仕様です
  • W3C Markup Validation Serviceを通せば、HTMLの文法違反を確認出来るので活用して下さい
  • class 属性、data-* 属性など、 複数の同値出現が許可された属性の採用を検討して下さい

Re: 4410 さん

投稿2020/10/16 10:49

編集2020/10/16 10:56
think49

総合スコア18189

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

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

退会済みユーザー

退会済みユーザー

2020/10/19 06:41

getElementByIdに関しては完全に勘違いして覚えていました。 ご意見をもとに試行錯誤してみようと思います。
guest

0

こんなかんじはどうですか?

window.addEventListener('load', function(){ const changeCollorBotton = document.getElementById("lists") const child1 = changeCollorBotton.children; changeCollorBotton.addEventListener('click', function(){ for (let i=0;i<child1.length;i++){     child1.item(i).setAttribute("style", "background-color:#808080;") } const element = document.querySelector('section') changeCollorBotton.addEventListener('click', function(){ element.remove() }) }) })

投稿2020/10/16 10:42

firegrape

総合スコア902

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

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

miyabi_takatsuk

2020/10/16 18:35

要件を満たせておりませんので、低評価いたしました。 これでは、"複数個のdiv#lists.memo"に対してイベントを起こす要件は満たされません。
退会済みユーザー

退会済みユーザー

2020/10/19 06:40

そうなのですね。 firegrapeさんもmiyabi_takatsukさんも貴重なご意見ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問