Javascript 月、周、日标题栏按钮点击的回调?
我需要运行一些Javascript代码,在用户单击日/周/月按钮时重新加载日历。有没有像dayButtonClicked之类的回调 错误发生: 当我第一次加载日历时。最初的景色看起来很好。当我加载另一个视图(如week)时。每个条目都是重复的,并显示两个数据源。如果我在日和月之间再次单击后退和前进,数据将恢复正常。发生的情况是,removeEventSource在逐日单击后首次加载新视图时没有被调用。你以前见过这种情况吗Javascript 月、周、日标题栏按钮点击的回调?,javascript,html,jquery,fullcalendar,jquery-events,Javascript,Html,Jquery,Fullcalendar,Jquery Events,我需要运行一些Javascript代码,在用户单击日/周/月按钮时重新加载日历。有没有像dayButtonClicked之类的回调 错误发生: 当我第一次加载日历时。最初的景色看起来很好。当我加载另一个视图(如week)时。每个条目都是重复的,并显示两个数据源。如果我在日和月之间再次单击后退和前进,数据将恢复正常。发生的情况是,removeEventSource在逐日单击后首次加载新视图时没有被调用。你以前见过这种情况吗 <script type='text/javascript'>
<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之后!?请看我的天哪,过去几个月我一直在感受你的痛苦。经过无数次搜索才发现这个问题。请放心,你的帖子帮助了其他人!谢谢。天哪,过去几个月我一直在感受你的痛苦。经过无数次搜索才发现这个问题。请放心,你的帖子帮助了其他人!谢谢