Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 月、周、日标题栏按钮点击的回调?_Javascript_Html_Jquery_Fullcalendar_Jquery Events - Fatal编程技术网

Javascript 月、周、日标题栏按钮点击的回调?

Javascript 月、周、日标题栏按钮点击的回调?,javascript,html,jquery,fullcalendar,jquery-events,Javascript,Html,Jquery,Fullcalendar,Jquery Events,我需要运行一些Javascript代码,在用户单击日/周/月按钮时重新加载日历。有没有像dayButtonClicked之类的回调 错误发生: 当我第一次加载日历时。最初的景色看起来很好。当我加载另一个视图(如week)时。每个条目都是重复的,并显示两个数据源。如果我在日和月之间再次单击后退和前进,数据将恢复正常。发生的情况是,removeEventSource在逐日单击后首次加载新视图时没有被调用。你以前见过这种情况吗 <script type='text/javascript'>

我需要运行一些Javascript代码,在用户单击日/周/月按钮时重新加载日历。有没有像dayButtonClicked之类的回调

错误发生:

当我第一次加载日历时。最初的景色看起来很好。当我加载另一个视图(如week)时。每个条目都是重复的,并显示两个数据源。如果我在日和月之间再次单击后退和前进,数据将恢复正常。发生的情况是,removeEventSource在逐日单击后首次加载新视图时没有被调用。你以前见过这种情况吗

<script type='text/javascript'>

    $(document).ready(function() {
    
        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var loadUrl = "menu_booking.php?ne=1&calsub=1";
        var lastView;
        var fullSource = "../fullcalendar/json-events.php?idc=<?= $sClient ?>&v=long";
        var liteSource = "../fullcalendar/json-events.php?idc=<?= $sClient ?>";
        
        $('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay'
            },
            columnFormat: {
                month: 'ddd',
                week: 'ddd d/M',
                day: 'dddd d/M'
            },          
            defaultView: 'agendaDay',           
            firstDay: 1,            
            //editable: true,
            selectable: true,
            allDaySlot: false,
            firstHour: 7,

                
                        

            viewDisplay: function(view) {
                if (lastView == undefined) { lastView = 'firstRun';  }
                
                if (view.name != lastView ) {
                
                if (view.name == 'agendaWeek') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', fullSource ); 
                }
                if (view.name == 'agendaDay') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', liteSource ); 
                }
                
                if (view.name == 'month') { 
                    $('#calendar').fullCalendar( 'removeEventSource', fullSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', liteSource ); 
                    $('#calendar').fullCalendar( 'addEventSource', fullSource ); 
                }
                lastView = view.name;
                }
            },
            
            timeFormat: { // for event elements
                agendaDay: '',
                agendaWeek: '',
                month: '',
                '': 'h(:mm)t' // default
            },          
                            
        });
        //$('#calendar').limitEvents(2);
    });

</script>
当我从默认加载的视图移动到另一个视图时,它仍然会加倍加载数据。我开始认为这肯定是FullCalendar中的一个bug。我快发疯了

编辑2: 天哪。真不敢相信它终于起作用了

我不知道为什么,但我需要交换addEventSource和removeEventSource,现在看起来像这样:

        viewDisplay: function(view) {
            if (lastView == undefined) { lastView = 'firstRun';  }
            
            //alert("viewname: "+ view.name + "lastView: " + lastView);
            if (view.name != lastView ) {
                if (view.name == 'agendaWeek') { 
                    $('#calendar').fullCalendar( 'addEventSource', shortSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }
                if (view.name == 'agendaDay') { 
                    //alert("in day: add litesource");
                    $('#calendar').fullCalendar( 'addEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }
                
                if (view.name == 'month') { 
                    //alert("in month: Delete litesource");
                    $('#calendar').fullCalendar( 'addEventSource', shortSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', longSource ); 
                    $('#calendar').fullCalendar( 'removeEventSource', shortSource ); 
                }
                lastView = view.name;
            }
        },

通常,单击查看按钮将触发此事件

请小心,因为如果您在“日视图”中更改“日”或“月视图”中更改“月”,但通过存储最后一个变量将其忽略,则此事件也会触发

jQuery

.
viewDisplay: function(view) { ** }
.
将**替换为

.fullCalendar( 'refetchEvents' )
它会再次收到你的反馈。如刷新和更新可能发生的任何更改

或者你可以切换来源

$('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=Complex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=Basic' );   
但是,要找出单击了哪些按钮,您需要这样做

 eventClick: function( event, jsEvent, view ) 
             { }

通常,单击查看按钮将触发此事件

请小心,因为如果您在“日视图”中更改“日”或“月视图”中更改“月”,但通过存储最后一个变量将其忽略,则此事件也会触发

jQuery

.
viewDisplay: function(view) { ** }
.
将**替换为

.fullCalendar( 'refetchEvents' )
它会再次收到你的反馈。如刷新和更新可能发生的任何更改

或者你可以切换来源

$('#calendar').fullCalendar( 'removeEventSource', '/diaryFeed.aspx?style=Complex' ); $('#calendar').fullCalendar( 'addEventSource', '/diaryFeed.aspx?style=Basic' );   
但是,要找出单击了哪些按钮,您需要这样做

 eventClick: function( event, jsEvent, view ) 
             { }

是的-不幸的是,这取决于你如何看待它-它可能是一个功能或一个bug!?!重要的是

ewDisplay: function(view) {
             if (lastView == undefined) { lastView = 'firstRun';  }
             if (view.name != lastView ){ ...
从我的另一个帖子

为什么lastView==未定义?这是因为当日历首次加载时,甚至在屏幕上出现任何内容之前,此事件就会触发

因此,我将var=lastview设置为未定义,当事件第一次调用它时,它可以是任何东西,但不能是任何monthView的实际名称 此步骤跳过第一个事件-并且不会添加您的提要两次!我把这两个东西都添加到了开发人员的bug中。。但他们正在考虑这个问题,因为它们是有争议的特征

所以,剩下的唯一一件事就是硬编码一个skip方法——这就是为什么整个lastview都在那里的原因。我花了两三天的时间调试这个问题;您需要逐行跟踪您的代码,查看何时添加提要,并尝试以某种方式避免它

不要忘记在事件结束时设置last viewname

    ...
       lastView = view.name;
    }

是的-不幸的是,这取决于你如何看待它-它可能是一个功能或一个bug!?!重要的是

ewDisplay: function(view) {
             if (lastView == undefined) { lastView = 'firstRun';  }
             if (view.name != lastView ){ ...
从我的另一个帖子

为什么lastView==未定义?这是因为当日历首次加载时,甚至在屏幕上出现任何内容之前,此事件就会触发

因此,我将var=lastview设置为未定义,当事件第一次调用它时,它可以是任何东西,但不能是任何monthView的实际名称 此步骤跳过第一个事件-并且不会添加您的提要两次!我把这两个东西都添加到了开发人员的bug中。。但他们正在考虑这个问题,因为它们是有争议的特征

所以,剩下的唯一一件事就是硬编码一个skip方法——这就是为什么整个lastview都在那里的原因。我花了两三天的时间调试这个问题;您需要逐行跟踪您的代码,查看何时添加提要,并尝试以某种方式避免它

不要忘记在事件结束时设置last viewname

    ...
       lastView = view.name;
    }

@南瓜,这是一个很大的帮助。我也一直在阅读你的其他完整日历帖子,它们都非常有帮助,所以我把它们作为收藏夹添加了进来。基本上,我确信我已经尝试过viewDisplay:functionview,但我确信它只在页面最初加载时调用该回调,而不是在我单击view按钮(即周/月/日)时调用该回调。但是在另一篇文章中阅读了您的详细代码后,我重试了viewDisplay等,它工作得非常好。现在,通过该回调,我只需检查视图名称。如果是月,则加载简单的数据源,如果是天,则加载更详细的源。TYI遇到了一个真正的问题,无论我第一次单击任何一个,数据都会出现两次。它基本上不是用“removeEventSource”清除所有项目,我将在编辑中显示我的代码above@pumpkin这是一个很大的帮助。我也一直在阅读你的其他完整日历帖子和
他们都很有帮助,所以都是最受欢迎的。基本上,我确信我已经尝试过viewDisplay:functionview,但我确信它只在页面最初加载时调用该回调,而不是在我单击view按钮(即周/月/日)时调用该回调。但是在另一篇文章中阅读了您的详细代码后,我重试了viewDisplay等,它工作得非常好。现在,通过该回调,我只需检查视图名称。如果是月,则加载简单的数据源,如果是天,则加载更详细的源。TYI遇到了一个真正的问题,无论我第一次单击任何一个,数据都会出现两次。它基本上不是用“removeEventSource”清除所有项目。我将在上面的编辑中显示我的代码。您也可以尝试在更改视图时删除所有事件-我在调用之前也有过该版本。fullCalendar“removeEvents”这将删除所有事件-但不会删除源。这个双重来源是一个有点恼人的问题-希望它将在下一个版本中修复。伙计,你帮了我这么多忙,我很惊讶你能理解我的问题:好吧,你说的我都做了,但我仍然有这个问题。是的,我实际上也尝试过“removeEvents”,但这有一个更大的问题,每当我用箭头向前/向后导航时,它会添加越来越多的重复行,所以我返回到刚才的removeEventSource,它至少只有一个重复行。我将不得不建立一个更精简的版本。一个具有静态json源代码和基本日历屏幕的解决方案,我可以将整个解决方案公之于众,并允许您自己和完整日历的开发人员访问。哈哈,有趣的是,您说您已经花了2-3天的时间来处理它。昨晚,当我得到你的答案时,我跳上笔记本电脑,让我妻子沮丧的是,我从凌晨1点到凌晨4点一直坐在床上工作!尽管问题还没有解决,但我很高兴你也看到了同样的问题,而且不仅仅是我!只是想澄清一下,你是说你确实已经绕过了lastview==未定义的etc代码中发生的重复错误吗?ppumpkin这里是我在初始加载后遇到的问题的一个演示,如果你单击事件,即单击月份,你可以看到它复制了所有事件。如果单击“返回到日期”,然后再单击“返回到月份”,则可以看到重复项已修复。看看这个源代码,它似乎与您的代码相同,但仍然不起作用!!!它起作用了。我切换addEventSource和removeEventSource。removeEventSource应该在addEventSource之后!?请参见上面的“我的编辑”,您也可以在更改视图时尝试删除所有事件-我在调用之前也有该版本。fullCalendar“removeEvents”此操作将删除所有事件,但不会删除源。这个双重来源是一个有点恼人的问题-希望它将在下一个版本中修复。伙计,你帮了我这么多忙,我很惊讶你能理解我的问题:好吧,你说的我都做了,但我仍然有这个问题。是的,我实际上也尝试过“removeEvents”,但这有一个更大的问题,每当我用箭头向前/向后导航时,它会添加越来越多的重复行,所以我返回到刚才的removeEventSource,它至少只有一个重复行。我将不得不建立一个更精简的版本。一个具有静态json源代码和基本日历屏幕的解决方案,我可以将整个解决方案公之于众,并允许您自己和完整日历的开发人员访问。哈哈,有趣的是,您说您已经花了2-3天的时间来处理它。昨晚,当我得到你的答案时,我跳上笔记本电脑,让我妻子沮丧的是,我从凌晨1点到凌晨4点一直坐在床上工作!尽管问题还没有解决,但我很高兴你也看到了同样的问题,而且不仅仅是我!只是想澄清一下,你是说你确实已经绕过了lastview==未定义的etc代码中发生的重复错误吗?ppumpkin这里是我在初始加载后遇到的问题的一个演示,如果你单击事件,即单击月份,你可以看到它复制了所有事件。如果单击“返回到日期”,然后再单击“返回到月份”,则可以看到重复项已修复。看看这个源代码,它似乎与您的代码相同,但仍然不起作用!!!它起作用了。我切换addEventSource和removeEventSource。removeEventSource应该在addEventSource之后!?请看我的天哪,过去几个月我一直在感受你的痛苦。经过无数次搜索才发现这个问题。请放心,你的帖子帮助了其他人!谢谢。天哪,过去几个月我一直在感受你的痛苦。经过无数次搜索才发现这个问题。请放心,你的帖子帮助了其他人!谢谢