2017-02-27 77 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的方法的唯一途徑。其基本思路:

  • 處理「中選擇」事件
  • 取當前fullCalenar的內存使用「clientEvents」方法中的所有事件。
  • 循環遍歷它們並檢查它們中的任何一個是否是後臺事件,如果是,它們是否與選定時間段重疊。如果他們這樣做,那麼這就是被點擊的事件。

我沒有測試過這一點,但它是基於一些舊的代碼,我發現,所以希望你的想法:

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

我會看看這個。感謝您的想法 –

+0

@hud。你有這個運氣嗎? – ADyson

+0

我給它一個嘗試,但它不工作 –