Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fullCalendar:如何在客户事件中按日期筛选?_Javascript_Jquery_Fullcalendar - Fatal编程技术网

Javascript fullCalendar:如何在客户事件中按日期筛选?

Javascript fullCalendar:如何在客户事件中按日期筛选?,javascript,jquery,fullcalendar,Javascript,Jquery,Fullcalendar,为避免重叠事件,我使用此函数: function isOverlapping(event){ var array = $('#calendar').fullCalendar('clientEvents'); for(i in array){ if(array[i].id != event.id){ if(array[i].allDay || event.allDay){ if(array[i].start.getDate()

为避免重叠事件,我使用此函数:

    function isOverlapping(event){
    var array = $('#calendar').fullCalendar('clientEvents');
    for(i in array){
      if(array[i].id != event.id){
        if(array[i].allDay || event.allDay){
          if(array[i].start.getDate() == event.start.getDate()){
            if(array[i].start.getMonth() == event.start.getMonth()){
              return true;
            }
          }
        }
        else{
          if(event.end > array[i].start && event.start < array[i].end){ return true;}
        }
      }
    }
      return false;
  }
function getEventsByFilter(filter){        
        var allevents = new Array();
        var filterevents = new Array();
        allevents = getCalendarEvents(null);

        for(var j in allevents){ 
            if(allevents[j].eventtype === filter)
            {
                filterevents.push(allevents[j]);
            }
        }           

        return filterevents;
    }
但这会返回所有事件

注意: 我已将
view\u start
view\u end
声明为全局变量,并在ViewDisplay中计算它们,如下所示:

    var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (event.start >= view_start && view_end > event.start)});
 view_start = view.visStart;
 view_end = view.visEnd;     
moment(calEvent.start).format('YYYY-MM-DD')

如何获取当前视图中可见的事件。

fullcalendar中没有内置的筛选器,您必须自己制作。你唯一能做的就是做你正在做的事情:)…使用你自己的过滤函数

这是我做的过滤他们,但这是客户端,所以过滤将客户端。。。这可能是一个问题,但对于我的特殊解决方案来说,这是不够的

这是我的例子:

function getCalendarEvents(filter){

        var events = new Array();      
            if(filter == null)
            {
                events = calendar.fullCalendar('clientEvents');
            }
            else
            {
                events = getEventsByFilter(filter);                 
            }           
        return events;                 
    }
过滤事件功能:

    function isOverlapping(event){
    var array = $('#calendar').fullCalendar('clientEvents');
    for(i in array){
      if(array[i].id != event.id){
        if(array[i].allDay || event.allDay){
          if(array[i].start.getDate() == event.start.getDate()){
            if(array[i].start.getMonth() == event.start.getMonth()){
              return true;
            }
          }
        }
        else{
          if(event.end > array[i].start && event.start < array[i].end){ return true;}
        }
      }
    }
      return false;
  }
function getEventsByFilter(filter){        
        var allevents = new Array();
        var filterevents = new Array();
        allevents = getCalendarEvents(null);

        for(var j in allevents){ 
            if(allevents[j].eventtype === filter)
            {
                filterevents.push(allevents[j]);
            }
        }           

        return filterevents;
    }

fullCalendar中的大多数函数都使用过滤器

这些过滤器可能是一个数字,通过ID进行过滤,也可能是返回true或false的函数,具体取决于您过滤的内容

var array = $('#calendar').fullCalendar('clientEvents',function(event)
    if(event.start > '1111-11-11')return true;
    else return false;
);

您想要使用的oneliner的问题是event.start实际上是一个对象。我可以使用类似的方法:

    var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (event.start >= view_start && view_end > event.start)});
 view_start = view.visStart;
 view_end = view.visEnd;     
moment(calEvent.start).format('YYYY-MM-DD')
因此,对于您的情况,请尝试:

var array = $('#calendar').fullCalendar('clientEvents', function(events){ return (moment(events.start).format('YYYY-MM-DD') >= view_start && view_end > moment(events.start).format('YYYY-MM-DD'))});

是否要显示特定时间范围内的事件,如每月?您可以演示如何获取事件吗?我使用一个php文件从mysql数据库获取事件,并使用
json\u encode
返回json提要。所以您使用json添加事件,但仍然需要很长时间?为什么不过滤服务器端的事件,并在AJAX调用中传递一个参数,告诉服务器您想要什么类型的事件?感谢Henrique,我已经实现了一个服务器端过滤器,这会使它更快,但如果我知道如何更有效地使用FullCalendar过滤器会更好。