我使用jquery fullcalendar效果很好。我遇到的一个问题是,如果你单击向前或向后快速移动几个月,它仍然会尝试触发多个ajax请求,它不会等到你确实在那个月“安顿下来”。
我基本上希望它在发出ajax事件之前等待1秒,以确保用户不会再次点击下一步。
这可以在jquery完整日历中使用吗?我原本以为有这样的跟随和其他高级功能的插件会有这个
答案 0 :(得分:2)
JQuery有一系列Ajax事件处理程序,如ajaxSend,ajaxPrefilter和ajaxStart。
使用ajaxPrefilter()方法,您可能会在发送之前捕获Ajax请求,将其延迟,如果在时间范围内未检测到月份导航按钮上的单击事件,则发送请求,否则将中止。
这是一个人为的例子,但这些方面的内容可能与你想要的很接近:
var enableRequest = true;
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
// Modify options, control originalOptions, store jqXHR, etc
if (!enableRequest ){
jqXHR.abort();
}
});
$('span.fc-button-prev, span.fc-button-next').click(function(){
enableRequest = false;
setTimeout("setEnabled()", 2000)
});
function setEnabled()
{
enableRequest = true;
});
答案 1 :(得分:-1)
你能尝试编辑fullcalendar.js吗?
〜第114行
var fc = $.fullCalendar = { version: "1.5.3" };
var fcViews = fc.views = {};
var ajax = null; // Add this line
〜第978行
pushLoading();
if (ajax) // add this line
ajax.abort(); // add this line
ajax = $.ajax($.extend({}, ajaxDefaults, source, { // CHange this line
data: data,
success: function(events) {
ajax = null; // Add this line
events = events || [];
var res = applyAll(success, this, arguments);
if ($.isArray(res)) {
events = res;
}
callback(events);
},
这样我就应该停止任何“双重ajax查询”。
答案 2 :(得分:-1)
我想我明白了,基本上把一个计时器放在事件回调中并从那里踩油门。
我想做这样的事情:
events: function (start, end, callback) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
put loadMonthData call here;
callback here();
}, 1000);
}