前提・実現したいこと
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内でもデータを展開して当てはめる」ことを実現出来ればと思っておりましたが思った様にいきませんでした。ご助力頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 00:57