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

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

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

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

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

Ruby on Rails

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

755閲覧

吹き出しの中身に関連したデータを表示させたい

eita-eng

総合スコア3

Ruby

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

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

Ruby on Rails

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/03/19 12:01

編集2021/03/19 12:08

前提・実現したいこと

jQueryのtooltipを用いて吹き出し機能を作成したいと思っております。
吹き出しの中に、マウスカーソルを合わせた部分に関連したデータを表示させたいと思っているのですが思ったような実装をすることが出来ず悪戦苦闘しております。

例:カレンダー表の予定にカーソルを合わせると予定の内容が表示される。(gem'gon'を導入しjs内でも変数を使用可能としております。)

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

カレンダー上に予定が2つあったとして、吹き出しは理想の動きをしておりますが、内容を新たに追加した時に2つとも同じ予定の内容となってしまいます。(内容は新しい方です。)

該当のソースコード

↓Eventscontroller

Ruby

1class EventsController < ApplicationController 2 before_action :set_event, only: [:show, :edit, :update, :destroy] 3 before_action :set_department, only: [:index, :create, :show] 4 5 def index 6 @departments = Department.all # 予定表の表記名用 7 @events = Department.find(params[:department_id]).events # 予定表に関連のある予定だけを抽出 8 @comment = Comment.new 9 @comments = @department.comments.includes(:user) # 予定表に関連づいたコメントのみを取得 10 gon.event = @events #js用の変数 11 end 12 13 def new 14 @events = current_user.events 15 end 16 17 def create 18 @events = @department.events.new(event_params) # 予定表に関連づいた予定のみを抽出 19 if @events.save 20 redirect_index 21 else 22 render :new 23 end 24 end 25 26 def show 27 end 28 29 def edit 30 end 31 32 def update 33 if @event.update(event_params) 34 redirect_index 35 else 36 render :edit 37 end 38 end 39 40 def destroy 41 @event.destroy 42 redirect_index 43 end 44 45 private 46 47 def event_params 48 params.require(:event).permit(:title, :content, :start_time, :id).merge(user_id: current_user.id, 49 department_id: params[:department_id]) 50 end 51 52 def set_event 53 @event = Event.find(params[:id]) 54 end 55 56 def set_department 57 @department = Department.find(params[:department_id]) 58 end 59 60 def redirect_index 61 redirect_to department_events_path 62 end 63end 64

↓.js

Js

1const moment = require("moment"); 2 3$(window).on('load', function() { 4 $.each(gon.event, function(index,value) { 5 var time = new Date(value.start_time) 6 var nowTime = moment(time).format() 7 var tooltipHtml = ` 8 <div> 9 <div class="tooltipClose">×</div> 10 <div style="margin: 10px;"> 11 <div> 12 予定:${value.title}<br> 13 ${nowTime}<br> 14 </div> 15 </div> 16 </div> 17 </div>`; 18 19 $(".showTooltip").tooltip({ 20 content: tooltipHtml 21 }) 22 }); 23});

↓_main_event.html.erb(index.html.erbから呼び出している)該当されるコードは<%# カレンダー予定追加 %>内の記述

Ruby

1<div class="event-header"> 2 <div class=event-name> 3 <%= @department.name %> 4 </div> 5 <div class="event-destroy"> 6 <%= link_to '予定表を削除する', department_path(@department.id), method: :delete, class:"button" %> 7 </div> 8</div> 9 10<div class="event-main"> 11 <div class="plan-create"> 12 <%= link_to '予定を追加', new_department_event_path %> 13 </div> 14 <div class="calendar"> 15 <%# カレンダ表 %> 16 <%= month_calendar events: @events do |date, events| %> 17 <%= date.day %> 18 <%# カレンダー予定追加 %> 19 <% events.each do |event| %> 20 <div class="event-display"> 21 <%=link_to event.title, department_event_path(@department,event), class:"event-title showTooltip", title: "ツールチップ"%> 22 <span><%= event.start_time.strftime("%H:%M")%></span> 23 </div> 24 <% end %> 25 <%#/ カレンダー予定追加 %> 26 <% end %> 27 <%#/ カレンダー表 %> 28 </div> 29 30 <div class="comments"> 31 <%= render partial: 'comment', collection: @comments %> 32 </div> 33</div> 34 35<%= form_with model: [@department, @comment], class: "form", local: true do |f| %> 36 <div class="form-comment"> 37 <%= f.text_field :text, placeholder: "type a message", class: "form-input" %> 38 <label class="form-image"> 39 <span class="image-file">画像</span> 40 <%= f.file_field :image, class: "hidden" %> 41 </label> 42 </div> 43 <%= f.submit '送信', class: "form-submit" %> 44<% end %>

試したこと

js内に'mouseover'の記述を加え、「.index()」を用いて「カーソルを当てたのはその日の何番目の予定」を表し、eachと組み合わせ実装を試みておりましたが解決に至りませんでした。
自分のイメージと致しまして、「ビュー側でeachを用いてデータの数によってタイトルを展開しているように、それに合わせてjs内でもデータを展開して当てはめる」ことを実現出来ればと思っておりましたが思った様にいきませんでした。ご助力頂ければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

$.each の中で

js

1 $(".showTooltip").tooltip({ 2 content: tooltipHtml 3 })

としているので、上書きされてしまってるように見えます。

クラス名にイベントの id を割り当てます。

erb

1<span class="showTooltip-<%= event.id %>">

js でも id の付いたクラスを指定します。

js

1 $(".showTooltip-" + value.id).tooltip({ 2 content: tooltipHtml 3 })

gon というのの中に id が入ってなかったら別の方法を考える必要があります。

投稿2021/03/28 23:26

neko_daisuki

総合スコア2090

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

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

eita-eng

2021/03/29 00:57

無事実装することが叶いました...!! idを一緒に付与する事によって関連付けは勿論、情報を保ったままイベント発火することが可能となるのですね! とても助かりました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問