fullcalendar-railsのeventClickが動作しない問題
タイトル通りの問題が起きていたため、原因を確認してみました。
現象
- fullcalendar の eventClick() に処理を登録しても動作してくれない。
- fullcalendar の dayClick() に登録した処理は動いている。
fullcalendarのイベント登録処理はこんな感じ
$(document).ready(function() { $('#calendar').fullCalendar({ editable: true, // カレンダーの日付クリック時に呼び出す処理(★動いている) dayClick: function(date, allDay, jsEvent, view) { // "test"のイベントを登録する $('#calendar').fullCalendar('addEventSource', [{ title: "test", start: date, allDay: true }]); $(this).css('background-color', 'red'); }, // カレンダーのイベントクリック時に呼び出す処理(★動いていない) eventClick: function(calEvent, jsEvent, view) { // クリックしたイベントを削除する $('#calendar').fullCalendar('removeEvents', calEvent._id); }, }); });
使用している環境
- Rails 4
- fullcalendar-rails (FullCalendar 1.6.4を使用)
- CentOS 6.5
- FireFox または Chromeで表示
Windows + xampp + FullCalendar 使用時には問題発生していなかったので、環境依存の問題のようです。。
原因
fullcalendar.js の bindDaySeg() 内で eventElementHandlers()を呼び出すことで、ハンドラの登録(eventClickも含む)を行っているのですが、その手前の以下の処理でエラーが発生していました。
function bindDaySeg(event, eventElement, segment) { if (isEventDraggable(event)) { t.draggableDayEvent(event, eventElement, segment); // use `t` so subclasses can override }
t.draggableDayEvent()内で、eventElement.draggable()のパラメータの登録、処理の定義を行っているのですが、今回使用している環境ではeventElement.draggable 自体がundefinedになっているため、ここで処理が中断されていました。
回避方法
fullcalendarの設定で、draggableをoffにすることで、t.draggableDayEvent()の呼び出しを回避するようにしました。。
$(document).ready(function() { $('#calendar').fullCalendar({ editable: true, disableDragging: true, // ★追加!! // カレンダーの日付クリック時に呼び出す処理 dayClick: function(date, allDay, jsEvent, view) { ...
課題
上記の回避方法を使うと、ドラッグイベントが使えなくなります。
根本的な解決には、eventElement.draggable が undefinedになる原因を確認して、その上で解決法を考える必要があります。
クリックだけ使うので良ければこの方法で、、よければお試し下さい。