🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

JavaScript

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

Q&A

解決済

2回答

1206閲覧

【JavaScript】querySelectorAllで取得したn個のli要素に関して、2番目以降のli要素にも正常に挙動させたいです。

tomas0528

総合スコア3

Ruby on Rails

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

JavaScript

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

0グッド

0クリップ

投稿2021/01/21 08:23

編集2021/01/21 08:33

######【内容】
顧客管理システムを開発中で、顧客一覧画面にて、顧客の名前にマウスオーバーすると電話番号とメアドが表示されるようにしたいです。

1番目の顧客についてはマウスオーバー中は電話番号とメアドが表示されますが、
2番目の顧客においてはマウスオーバーをしているのに、1番目の顧客の部分で1番目の顧客の情報が表示されており、2番目の顧客においては何も表示されません。

######【仮説】
querySelectorAllで取得できているli要素が1番目のみ?
→console.logで確認してみたところ、取得自体は1番目も2番目も問題なくできているよう。

一度、配列に変換してからforEachだと上手くいくか?
→下記コードの通りですが、結果としては上手くいかず、同じように1番目だけが表示されています。

昨日より色々と調べておりますが、どうにも解決の糸口が掴めません。皆様のお力をお借りしたいです。
何卒宜しくお願い致します。

JavaScript

1function clientIndex() { 2 const clients = [...document.querySelectorAll(".lists")]; 3 const phoneEmail = document.getElementById("phone-email"); 4 5 clients.forEach(function(target) { 6 target.addEventListener('mouseover', function(){ 7 phoneEmail.setAttribute("style", "display:block;") 8 }) 9 target.addEventListener('mouseout', function(){ 10 phoneEmail.removeAttribute("style", "display:block;"); 11 }) 12 }) 13} 14 15window.addEventListener('load', clientIndex)

RubyonRails

1 <div class="clients-index"> 2 <ul class="clients"> 3 <div class="child-a"> 4 <h3 class="text-title">登録済み顧客一覧</h3> 5 </div> 6 <% @allclients.each do |c| %> 7 <% if c.user_id == current_user.id %> 8 9 <li class="lists"> 10 <%=link_to client_path(c.id), method: :get, class:"client-name" do %> 11 <%= c.last_name %><%= " " %><%= c.first_name %> 12 <% end %> 13 <div class="phone-email hidden", id= "phone-email"> 14 <%= c.phone_num %><br><%= c.email%> 15 </div> 16 </li> 17 18 <% end %> 19 <% end %> 20 </ul> 21 </div>

イメージ説明

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

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

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

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

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

guest

回答2

0

.listsは複数なので、各々にイベントがあたっていますが、
#phone-emailは、IDのため、一個しか存在してはいけなく、
例えHTML上で複数個あっても、
一番最初の要素しか取得されません、
document.getElementByIdでは。

なので、各々の電番・メールアドレスを表示する、という仕組みに作り替えねばなりません。

投稿2021/01/21 08:37

miyabi_takatsuk

総合スコア9555

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

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

tomas0528

2021/01/21 08:50

ありがとうございます! phone-emailの方もそれぞれ表示させるための記述が必要と気が付きませんでした。 ご回答ありがとうございました!
guest

0

ベストアンサー

id="phone-email" を持つ要素が単一文書中に複数存在します。

const phoneEmail = document.getElementById("phone-email");

このコードで取得されるのは、id="phone-email" を持つ要素の中で一番最初のものです。

イベントリスナの中で対応する phone-email 要素を上手いこと見つける必要があります。たとえば event.target.querySelector('.phone-email') とか。

投稿2021/01/21 08:35

int32_t

総合スコア21679

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

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

tomas0528

2021/01/21 08:49

ありがとうございます! mouseoverとmouseoutそれぞれに、phoneEmail = target.querySelector('.phone-email') という記述を入れると上手く行きました! 表示させる情報の方に気が回っていませんでした。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問