全日历日双击回调
Fullcalendar day doubleclick callback
我需要实现对 dblclick 起作用的功能,例如 dayClick 回调。我尝试了所有找到的解决方案,但对我没有任何用处,例如 Michel's answer。顺便说一句,所有的线程都很旧。
这个问题看起来很微不足道,但我 运行 不知道为什么它不起作用。
有谁知道在最新版本中应该怎么做?
更新
好的,我找到问题了:)
当我设置这个选项时它停止工作:selectable: true
我改为添加:
dayRender: (date, element, view) ->
element.bind "dblclick", ->
alert "double click!"
dayClick: (date, jsEvent, view) ->
$(".fc-highlight").removeClass("fc-highlight")
$(jsEvent.toElement).addClass("fc-highlight")
并且完美运行:)
感谢您的帮助。
更新 2
但是,上述方案并不完美。一些元素覆盖了一天的对象,它不能在一天的整个表面上工作,所以我想出了另一个解决方案:
findClickedDay = (e) ->
days = $("#calendar .fc-day")
i = 0
while i < days.length
day = $(days[i])
mouseX = e.pageX
mouseY = e.pageY
offset = day.offset()
width = day.width()
height = day.height()
if mouseX > offset.left and mouseX < offset.left + width and mouseY > offset.top and mouseY < offset.top + height
return day
i++
eventAfterAllRender: (view) =>
$("#calendar").bind "dblclick", (e) =>
clickedDay = findClickedDay(e);
if clickedDay.length == 0 then return
date = new Date(clickedDay.data('date'))
alert "dblclick on date: #{date}"
fullcalendar V1.x
与 eventRender
Click for jsfiddle link.
配合使用效果很好
eventRender
在呈现事件时触发。 && dayRender
是一个用于修改日期单元格的挂钩。 Click for dayRender docs
eventRender: function(event, element) {
element.bind('dblclick', function() {
alert('double click!');
});
},
dayClick: function(date, jsEvent, view) {
prevTime = typeof currentTime === 'undefined' || currentTime === null
? new Date().getTime() - 1000000
: currentTime;
currentTime = new Date().getTime();
if (currentTime - prevTime < 500)
{
//double click call back
console.log("this is double click");
}
},
双击可以兑现时间
我 运行 遇到了与@Szymon Rut 相同的问题,双击在整个单元格中不起作用,在单元格的左上角没有响应。对我有用的是简单地使用 on() 而不是 bind() ...
dayFunction = function(date, cell) {
cell.on('dblclick', {date: date}, function(e) {
var view = 'month';
self.openAddEvent(e, view, e.data.date)
});
}
我认为这是一个常见问题,通常需要进行一些黑客攻击。 @Valar Morghulas 的事件渲染解决方案很适合捕获事件双击。不过,对于日历的其余部分,也许这有点干净。
(您基本上可以使用 dateClick 回调记住单击一次的日期,一旦鼠标移动就忘记了)
$('#calendar').fullCalendar({
...
dayClick: dayClickCallback,
eventRender: eventRenderCallback,
...
});
var slotDate;
function dayClickCallback(date){
slotDate = date;
$("#calendar").on("mousemove", forgetSlot);
}
function eventRenderCallback(event,element){
element.on("dblclick",function(){
dblClickFunction(event.start)
});
}
function forgetSlot(){
slotDate = null;
$("#calendar").off("mousemove", forgetSlot);
}
function dblClickFunction(date){
alert(date);
}
$("#calendar").dblclick(function() {
if(slotDate){
dblClickFunction(slotDate);
}
});
将 currentTime
设为静态变量并将张庭升的代码包装在一个函数中,然后它可以在任何 'Click' 处理程序中使用:
FullCalendarActions = {
currentTime: null,
isDblClick : function() {
var prevTime = typeof FullCalendarActions.currentTime === null
? new Date().getTime() - 1000000
: FullCalendarActions.currentTime;
FullCalendarActions.currentTime= new Date().getTime();
return FullCalendarActions.currentTime - prevTime < 500;
}
}
...在 FullCalendar 处理程序中使用:
dayClick : function(date, jsEvent, view) {
if (FullCalendarActions.isDblClick()){
// whatever...
}
}
有点老套,但您可以很容易地 "emulate" 在 dayClick
回调挂钩中双击。优点是您可以在 date
moment()-变量中获得点击日期 和 时间。
var doubleClick = false;
$('#calendar').fullCalendar({
dayClick: function(date, jsEvent, view) {
if(!doubleClick) {
doubleClick = true;
setTimeout(function() { doubleClick = false; }, 500); //this waits for a second click for the next 500ms
}
else {
//do your double click action here (date and time available in date variable)
}
}
});
我需要实现对 dblclick 起作用的功能,例如 dayClick 回调。我尝试了所有找到的解决方案,但对我没有任何用处,例如 Michel's answer。顺便说一句,所有的线程都很旧。
这个问题看起来很微不足道,但我 运行 不知道为什么它不起作用。
有谁知道在最新版本中应该怎么做?
更新
好的,我找到问题了:)
当我设置这个选项时它停止工作:selectable: true
我改为添加:
dayRender: (date, element, view) ->
element.bind "dblclick", ->
alert "double click!"
dayClick: (date, jsEvent, view) ->
$(".fc-highlight").removeClass("fc-highlight")
$(jsEvent.toElement).addClass("fc-highlight")
并且完美运行:)
感谢您的帮助。
更新 2
但是,上述方案并不完美。一些元素覆盖了一天的对象,它不能在一天的整个表面上工作,所以我想出了另一个解决方案:
findClickedDay = (e) ->
days = $("#calendar .fc-day")
i = 0
while i < days.length
day = $(days[i])
mouseX = e.pageX
mouseY = e.pageY
offset = day.offset()
width = day.width()
height = day.height()
if mouseX > offset.left and mouseX < offset.left + width and mouseY > offset.top and mouseY < offset.top + height
return day
i++
eventAfterAllRender: (view) =>
$("#calendar").bind "dblclick", (e) =>
clickedDay = findClickedDay(e);
if clickedDay.length == 0 then return
date = new Date(clickedDay.data('date'))
alert "dblclick on date: #{date}"
fullcalendar V1.x
与 eventRender
Click for jsfiddle link.
eventRender
在呈现事件时触发。 && dayRender
是一个用于修改日期单元格的挂钩。 Click for dayRender docs
eventRender: function(event, element) {
element.bind('dblclick', function() {
alert('double click!');
});
},
dayClick: function(date, jsEvent, view) {
prevTime = typeof currentTime === 'undefined' || currentTime === null
? new Date().getTime() - 1000000
: currentTime;
currentTime = new Date().getTime();
if (currentTime - prevTime < 500)
{
//double click call back
console.log("this is double click");
}
},
双击可以兑现时间
我 运行 遇到了与@Szymon Rut 相同的问题,双击在整个单元格中不起作用,在单元格的左上角没有响应。对我有用的是简单地使用 on() 而不是 bind() ...
dayFunction = function(date, cell) {
cell.on('dblclick', {date: date}, function(e) {
var view = 'month';
self.openAddEvent(e, view, e.data.date)
});
}
我认为这是一个常见问题,通常需要进行一些黑客攻击。 @Valar Morghulas 的事件渲染解决方案很适合捕获事件双击。不过,对于日历的其余部分,也许这有点干净。
(您基本上可以使用 dateClick 回调记住单击一次的日期,一旦鼠标移动就忘记了)
$('#calendar').fullCalendar({
...
dayClick: dayClickCallback,
eventRender: eventRenderCallback,
...
});
var slotDate;
function dayClickCallback(date){
slotDate = date;
$("#calendar").on("mousemove", forgetSlot);
}
function eventRenderCallback(event,element){
element.on("dblclick",function(){
dblClickFunction(event.start)
});
}
function forgetSlot(){
slotDate = null;
$("#calendar").off("mousemove", forgetSlot);
}
function dblClickFunction(date){
alert(date);
}
$("#calendar").dblclick(function() {
if(slotDate){
dblClickFunction(slotDate);
}
});
将 currentTime
设为静态变量并将张庭升的代码包装在一个函数中,然后它可以在任何 'Click' 处理程序中使用:
FullCalendarActions = {
currentTime: null,
isDblClick : function() {
var prevTime = typeof FullCalendarActions.currentTime === null
? new Date().getTime() - 1000000
: FullCalendarActions.currentTime;
FullCalendarActions.currentTime= new Date().getTime();
return FullCalendarActions.currentTime - prevTime < 500;
}
}
...在 FullCalendar 处理程序中使用:
dayClick : function(date, jsEvent, view) {
if (FullCalendarActions.isDblClick()){
// whatever...
}
}
有点老套,但您可以很容易地 "emulate" 在 dayClick
回调挂钩中双击。优点是您可以在 date
moment()-变量中获得点击日期 和 时间。
var doubleClick = false;
$('#calendar').fullCalendar({
dayClick: function(date, jsEvent, view) {
if(!doubleClick) {
doubleClick = true;
setTimeout(function() { doubleClick = false; }, 500); //this waits for a second click for the next 500ms
}
else {
//do your double click action here (date and time available in date variable)
}
}
});