Fullcalendar Qtip on mouseover 而不是 eventRender
Fullcalendar Qtip on mouseover instead of eventRender
我在将 Qtip 附加到 eventMousever 事件而不是 fullcalendar 中的 eventRender 事件时遇到问题。
我想这样做的原因是因为拥有数据的服务器在另一个国家,延迟使得在日历加载之前预取所有 qtip 文本的时间太长(最多 8 秒)。我写了 ajax 函数 returns 需要的 qtip 信息,但问题是 eventRender 函数在 qtip 信息存在之前运行。因此,在我看来,最合乎逻辑的解决方案是在 eventMouseover 事件中附加 qtip(通过 ajax 发送对 qtip 文本的请求,然后将 qtip 附加到元素),但我找不到如何获得访问权限到 eventMouseover 事件中的事件元素。 (我尝试将 qtip 附加到鼠标悬停事件的 $(this) 上,但没有任何反应(也没有错误)。
我也试过另一种方法。加载日历后,我在后台获取所有工具提示,然后我尝试 .fullCalendar( 'rerenderEvents' ) 但这不会按预期工作 -> 例如,除非你更改 [= 否则不会出现新的工具提示31=] 个月,然后才会出现新的工具提示(在后台获取),所以我相信 rerenderEvents 不起作用。
关于如何解决这个问题有什么建议吗?
eventRender 代码(有效):
eventRender: function (event, element) {
if (event.qtip_id) {
element.qtip({
content: {
title: $('#' + event.qtip_title_id).html(),
text: $('#' + event.qtip_id).html()
},
position: {
my: 'bottom center',
at: 'top center',
//target: 'mouse',
adjust: { mouse: false },
viewport: $(window),
},
style: {
classes: 'bigger_font qtip-light qtip-shadow'
},
show: {
delay: 500
},
hide: {
fixed: true
}
});
}
在呈现日历后在后台获取所有工具提示的代码:
for (i = 0; i<all_events.length; i++) {
if (all_events[i].qtip_id) {
//alert(all_events[i].title);
myevent = {
title: all_events[i].title,
url: all_events[i].url,
color: all_events[i].color,
form_id: all_events[i].form_id,
priority: all_events[i].priority,
qtip_id: all_events[i].qtip_id,
qtip_title_id: all_events[i].qtip_title_id,
qtip_dealer: all_events[i].qtip_dealer,
qtip_country_id: all_events[i].qtip_country_id,
qtip_customer_id: all_events[i].qtip_customer_id,
qtip_customer_name: all_events[i].qtip_customer_name,
qtip_id: all_events[i].qtip_id,
qtip_id_id: all_events[i].qtip_id_id
};
$.ajax({
type: 'POST',
url: 'ajax/calendar_generate_qtip.php',
data: myevent,
dataType: 'html',
success: function(data) {
$('#qtip_holder').html($('#qtip_holder').html() + data);
}
}).fail(function() {
});
}
}
$('#calendar').fullCalendar('rerenderEvents');
所以我的问题是:是否可以在完整日历的 eventMouseover 事件中创建和显示 qtip? (因为eventMouseover没有权限访问事件的元素,至少我看不到)。
感谢您的阅读。
P.S。我为我蹩脚的英语道歉。
如果您想在 eventMouseover 上访问事件的元素,这是可能的。
FullCalendar 文档清楚地表明,在 eventMouseover 的回调函数中,"this" 设置为事件的 <div>
元素,$(this) 提供与您获得的相同元素对象在 eventRender 的回调上。 http://fullcalendar.io/docs/mouse/eventMouseover/
你提到过
(I have tried attaching the qtip to $(this) of mouseover event, but nothing happens
但我认为这是正常的鼠标悬停事件,而不是回调。
我在将 Qtip 附加到 eventMousever 事件而不是 fullcalendar 中的 eventRender 事件时遇到问题。
我想这样做的原因是因为拥有数据的服务器在另一个国家,延迟使得在日历加载之前预取所有 qtip 文本的时间太长(最多 8 秒)。我写了 ajax 函数 returns 需要的 qtip 信息,但问题是 eventRender 函数在 qtip 信息存在之前运行。因此,在我看来,最合乎逻辑的解决方案是在 eventMouseover 事件中附加 qtip(通过 ajax 发送对 qtip 文本的请求,然后将 qtip 附加到元素),但我找不到如何获得访问权限到 eventMouseover 事件中的事件元素。 (我尝试将 qtip 附加到鼠标悬停事件的 $(this) 上,但没有任何反应(也没有错误)。
我也试过另一种方法。加载日历后,我在后台获取所有工具提示,然后我尝试 .fullCalendar( 'rerenderEvents' ) 但这不会按预期工作 -> 例如,除非你更改 [= 否则不会出现新的工具提示31=] 个月,然后才会出现新的工具提示(在后台获取),所以我相信 rerenderEvents 不起作用。
关于如何解决这个问题有什么建议吗?
eventRender 代码(有效):
eventRender: function (event, element) {
if (event.qtip_id) {
element.qtip({
content: {
title: $('#' + event.qtip_title_id).html(),
text: $('#' + event.qtip_id).html()
},
position: {
my: 'bottom center',
at: 'top center',
//target: 'mouse',
adjust: { mouse: false },
viewport: $(window),
},
style: {
classes: 'bigger_font qtip-light qtip-shadow'
},
show: {
delay: 500
},
hide: {
fixed: true
}
});
}
在呈现日历后在后台获取所有工具提示的代码:
for (i = 0; i<all_events.length; i++) {
if (all_events[i].qtip_id) {
//alert(all_events[i].title);
myevent = {
title: all_events[i].title,
url: all_events[i].url,
color: all_events[i].color,
form_id: all_events[i].form_id,
priority: all_events[i].priority,
qtip_id: all_events[i].qtip_id,
qtip_title_id: all_events[i].qtip_title_id,
qtip_dealer: all_events[i].qtip_dealer,
qtip_country_id: all_events[i].qtip_country_id,
qtip_customer_id: all_events[i].qtip_customer_id,
qtip_customer_name: all_events[i].qtip_customer_name,
qtip_id: all_events[i].qtip_id,
qtip_id_id: all_events[i].qtip_id_id
};
$.ajax({
type: 'POST',
url: 'ajax/calendar_generate_qtip.php',
data: myevent,
dataType: 'html',
success: function(data) {
$('#qtip_holder').html($('#qtip_holder').html() + data);
}
}).fail(function() {
});
}
}
$('#calendar').fullCalendar('rerenderEvents');
所以我的问题是:是否可以在完整日历的 eventMouseover 事件中创建和显示 qtip? (因为eventMouseover没有权限访问事件的元素,至少我看不到)。
感谢您的阅读。
P.S。我为我蹩脚的英语道歉。
如果您想在 eventMouseover 上访问事件的元素,这是可能的。
FullCalendar 文档清楚地表明,在 eventMouseover 的回调函数中,"this" 设置为事件的 <div>
元素,$(this) 提供与您获得的相同元素对象在 eventRender 的回调上。 http://fullcalendar.io/docs/mouse/eventMouseover/
你提到过
(I have tried attaching the qtip to $(this) of mouseover event, but nothing happens
但我认为这是正常的鼠标悬停事件,而不是回调。