Javascript 单击custombutton时事件的完整日历执行顺序

Javascript 单击custombutton时事件的完整日历执行顺序,javascript,jquery,mysql,fullcalendar,Javascript,Jquery,Mysql,Fullcalendar,我想做的是一个过滤器按钮,当用户单击它并键入资源名称时,就会看到仅与资源名称匹配的事件。首先,渲染所有事件。然后,当用户单击搜索按钮时,只会查看与用户键入的资源匹配的事件。我使用removeEvents来实现这一点,它删除所有不满足条件的事件。但是,问题是,在搜索一次之后,如果用户键入了另一个资源名称,则不会查看任何事件,因为用户搜索的事件已被删除。因此,我在removeEvents之前添加refetchEvents。但是,这一次,没有删除任何事件,并且由于refetchEvents而查看所有事

我想做的是一个过滤器按钮,当用户单击它并键入资源名称时,就会看到仅与资源名称匹配的事件。首先,渲染所有事件。然后,当用户单击搜索按钮时,只会查看与用户键入的资源匹配的事件。我使用removeEvents来实现这一点,它删除所有不满足条件的事件。但是,问题是,在搜索一次之后,如果用户键入了另一个资源名称,则不会查看任何事件,因为用户搜索的事件已被删除。因此,我在removeEvents之前添加refetchEvents。但是,这一次,没有删除任何事件,并且由于refetchEvents而查看所有事件,即使我在removeEvents之前键入了它。 这是密码

myCustomButton1: {
              text: 'filter by resource',

              click: function() {

                $("#calendar").fullCalendar('refetchEvents');
                var teachername = prompt("type the name of teacher");
                var teacherlist = <?php echo $json_array8; ?>;
                var exist = false;
                if(prompt)
                {   


                    for(var i = 0; i < teacherlist.length ; i++)
                    {
                        if(teacherlist[i]["courseTeacher"] == teachername)
                        {
                            exist = true;
                        }

                    }
                }
                if(!exist)
                {
                    alert("check the resource name.");
                }
                else
                {

                    $('#calendar').fullCalendar('removeEvents', function (calEvent) {
                                if(calEvent.resourceId != teachername)
                                {
                                    return true;
                                }else
                                {
                                    return false;
                                }

                        });

                }
             }
            }
myCustomButton1:{
文本:“按资源筛选”,
单击:函数(){
$(“#日历”).fullCalendar('refetchEvents');
var teachername=prompt(“键入教师姓名”);
var teacherlist=;
var-exist=false;
如果(提示)
{   
for(var i=0;i
不要使用removeEvents。 根据文档(),removeEvents完全从calendar对象中删除事件。这就是为什么键入新搜索字符串时找不到事件的原因

相反,您可以在eventRender回调中使用element.hide()和element.show()

eventRender: function(event, element){
    var teacherlist = <?php echo $json_array8; ?>;
    if(prompt)
    {   


        for(var i = 0; i < teacherlist.length ; i++)
        {
            if(teacherlist[i]["courseTeacher"] == teachername)
            {
                exist = true;
            }

        }
    }

    if(exist)
    {
        element.hide();
    }
    else
    {
        element.show();
    }

}
eventRender:function(事件,元素){
var teacherlist=;
如果(提示)
{   
for(var i=0;i
注: 使用show/hide的缺点是,在month视图中,fullcalendar的工作方式是在表结构中呈现事件。因此,如果隐藏事件,事件不会“向上流动”,因此,在事件之间会有一些空白,这看起来像是渲染问题。要通过您发出的此显示,您将别无选择,只能使用新的eventSource重新呈现所有事件。一个简单的方法是确保您使用的eventSource进行ajax调用。您可以确保在ajaxCall中传递搜索字符串并在ajax文件中进行处理。返回的值将是要呈现的已筛选事件。这里不会出现显示问题,因为可能会在内部调用reRenderEvents。同样,这种特殊方法的缺点是,每次要过滤日历事件时都必须进行ajax调用