2017-02-27 9 views
0

プロジェクトでFullCalendarを使用しています。バックグラウンドイベント、rendering="background"を使用しました。ユーザーがバックグラウンドイベントをクリックした場合、どうすれば検出できますか?私はこれを試してみますが、すべての日付をクリックすることができないので動作しません。バックグラウンドイベントを検出する

dayClick: function (start, end, allDay, jsEvent, view,color,calEvent) { 
      if (calevent.rendering==="background") { 
       alert('Click Background Event Area'); 
      } 
      else{ 
      $('#modal1').modal('show'); 
      } 

      if (start.isBefore(moment())) { 
       $('#calendar').fullCalendar('unselect'); 
       return false; 
      } 
     }, 
+0

https://fullcalendar.io/docs/mouse/eventClick/ - 「eventClickはバックグラウンドイベントに対してトリガーされません」そして、私はdayClickのメソッドシグネチャをどこから取得したのか分かりません。https://fullcalendar.io/docs/mouse/dayClick/またはhttps:// fullcalendarのいずれかに似ていません。 io/docs/timeline/dayClick/ – ADyson

+0

どうすればいいですか? –

+0

このリンクをチェックすることができます。あなたの質問に答えましたhttps://stackoverflow.com/questions/27359369/detect-click-on-background-event –

答えて

3

fullCalendarがバックグラウンドイベントに「クリック」タイプのイベントを公開していないので、これを行うには私は考えることができる唯一の方法は、本質的にDIYアプローチです。基本的な考え方:

  • は、「選択」イベント
  • は「ClientEventsへ」方法を使用して、現在fullCalenarのメモリ内のすべてのイベントを取得ハンドル。
  • これらをすべてループし、いずれかがバックグラウンドイベントであるかどうかを確認し、バックグラウンドイベントである場合は、選択した期間と重複するかどうかを確認します。もしそうであれば、それはクリックされたイベントです。

    select: function(start, end, jsEvent, view) { 
        var cal = $("#calendar"); //put the ID of your calendar element here 
        var evts = cal.fullCalendar('clientEvents'); //get all in-memory events 
        var selectedEvent = null; 
    
        for (i in evts) { 
         if (evts[i].rendering == "background" && start.isBefore(evts[i].end) && end.isAfter(evts[i].start)) { 
          selectedEvent = evts[i]; 
         } 
        } 
    } 
    

    この中に唯一の欠点は、「選択」ということですを選択することができます:私はこれをテストしていませんが、それは私が見つけたいくつかの古いコードに基づいているので、うまくいけばあなたのアイデアを得る

1回のクリックだけでなく、期間があるため、がバックグラウンドイベントをオーバーラップし、その中に完全に含まれていない可能性があります。それがあなたに合わない場合は、ロジックを少し調整することができます。開始と終了の両方がイベントの境界内にあることを要求する。

+1

私はこれを見ていきます。あなたの考えをありがとう –

+0

@hud。あなたはこれで運がありましたか? – ADyson

+0

私はそれを試みますが、それは仕事をしません –

関連する問題