2017-02-27 85 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

我给它一个尝试,但它不工作 –