【问题标题】:How to check event is already exist for a day - fullcalendar如何检查事件是否已经存在一天 - fullcalendar
【发布时间】:2017-10-13 17:28:13
【问题描述】:

如何在使用renderEvent方法时检查事件是否已经存在一天。

我发现可以在堆栈中为dayClickclientEvents 回答,我不确定它如何用于renderEvent

var diffDay = 5; 
for (var i = 0; i < diffDay; i++) {
    var copiedEventObject = $.extend({}, originalEventObject);
    var newDay = new Date(event.start);
    copiedEventObject.start = newDay;
    $inlineCalendar.fullCalendar('renderEvent', copiedEventObject, true);                       
}

我正在寻找类似下面的 if 条件或任何其他解决方案

if(....Condition?....){
    $inlineCalendar.fullCalendar('renderEvent', copiedEventObject, true);                       
}

【问题讨论】:

  • 任何人都有这个问题的答案...???

标签: jquery fullcalendar


【解决方案1】:

我的解决方案是比较 EventObject 的 .start。

更新:经过讨论,似乎我们之前的理解相反,我更新了我的代码

所以我的解决方案的条件是:

var allevents = $inlineCalendar.fullCalendar( 'clientEvents');

for(var i=0;i<allevents.length;i++ ){
var currentevent=allevents[i];
if((
(copiedEventObject.allDay && copiedEventObject.start == currentevent.start) 
|| HasSameDate(currentevent.start,copiedEventObject.start)
) == false){
    $inlineCalendar.fullCalendar('renderEvent', copiedEventObject, true);                       
}
}

function HasSameDate(date1,date2)
{
   return $inlineCalendar.fullCalendar.formatDate(date1, 'yyyyMMdd') == $inlineCalendar.fullCalendar.formatDate(date2, 'yyyyMMdd');
}

【讨论】:

  • 感谢您的快速重播,我会尽快测试您的答案,如果它适合我​​,则可以接受。
  • 目前它对我不起作用,总是调用 else case,我正在检查我是否有任何错误,你也可以告诉我你的意思是什么“currentevent.start”
  • 我已经试用了您更新的代码,但总是出现其他情况。
  • 太有趣了!它在我身边工作。似乎我的回答有 5 票,不确定是否可以在他们身边工作。顺便问一下,你那边有什么错误?
  • 它总是遇到其他情况并找到类似这样的条件结果“真:2014 年 5 月 14 日星期三 00:00:00 GMT+0530(印度标准时间):未定义:假”。这意味着“currentevent.start”未定义。
【解决方案2】:

不幸的是,上面的答案在我的场景中不起作用。所以我以自己的方式找到了一种解决方案。可能会帮助某人,但不确定它是否正确。

var allevents = $inlineCalendar.fullCalendar('clientEvents');
                var arrAlleventsDate = [];

                for(i in allevents){
                    if(arrAlleventsDate.indexOf($.fullCalendar.formatDate(allevents[i].start, 'yyyyMMdd')) == -1){
                        arrAlleventsDate.push($.fullCalendar.formatDate(allevents[i].start, 'yyyyMMdd'));
                    }
                }
if(arrAlleventsDate.indexOf($.fullCalendar.formatDate(newDay, 'yyyyMMdd')) == -1){
                        $inlineCalendar.fullCalendar('renderEvent', copiedEventObject, true); 
                    }

如果您希望为每个事件工作,请添加事件 ID 作为日期的前缀。

【讨论】:

    【解决方案3】:

    在议程视图中,如果在选定的时间段内还有其他事件,我会检查“选择”;检查是限制数量,字段(es:标题或自定义字段)和时间段:

     select: function(start, end, jsEvent) {
       var maxEvent = 2;
       var allEvents = $('#calendar').fullCalendar( 'clientEvents');
       var xst = moment(start);
       var xen = moment(end);
       var eventsCount = 0;
       var collideEvent;
       var tempField;
       for(var i=0;i<allEvents.length;i++ ) {
         var currentEvent=allEvents[i];
         if(xst.isBetween(currentevent.start,currentevent.end,null, '[)') || 
            xen.isBetween(currentevent.start,currentevent.end,null, '(]')) {
             eventsCount++;
             if(eventsCount>=maxEvent && tempField != currentEvent.field) {
               alert("!");
               $('#calendar').fullCalendar('unselect');
               return false;
               break;
             }
             collideEvent = currentEvent;
             tempField = collideEvent.field;                                
          }
       //proceed!
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2022-01-17
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多