contextMenu打破FullCalendar事件拖动

所以我最近使用jQuery contextMenu(http://abeautifulsite.net/blog/2008/09/jquery-context-menu-plugin/)为我的FullCalendar中的事件添加了一个上下文菜单。 它工作得非常漂亮,除了我的拖放function停止正常工作,当你拖动一个事件并放开另一个日期时事件日期没有改变,它重定向到事件的url。 我做了一些检查,并意识到eventDrop,eventDragStart和eventClick都没有被触发。 如果我注释掉上下文菜单,一切正常。 如果有人能够弄清楚为什么contextMenu阻止了fullCalendar回调被触发我会很感激,因为contextMenu完全适合我的需要。 contextMenu和事件回调的代码:

eventRender: function(event, element) { if (event.url.indexOf("https://www.google.com") != 0) { element.contextMenu({ menu: "myMenu", }, function(action, el) { if (action == "approve") { $.ajax({ url: 'events/' + event.id, data: { 'event' : { 'status' : "Approved", } }, type: "PUT", }), $('#calendar').fullCalendar('refetchEvents'); } else if (action == "deny") { $.ajax({ url: 'events/' + event.id, data: { 'event' : { 'status' : "Denied", } }, type: "PUT", }), $('#calendar').fullCalendar('refetchEvents'); } else if (action == "destroy") { if (confirm("Are you sure you want to delete this event?") ) { $.ajax({ url: 'events/' + event.id, type: "DELETE", }), $('#calendar').fullCalendar('refetchEvents'); } } else if (action == "edit") { window.location = 'events/' + event.id + '/edit' } } ); } }, eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc){ updateEvent(event); }, eventResize: function(event, dayDelta, minuteDelta, revertFunc){ updateEvent(event); }, eventClick: function(event) { if (event.url.indexOf("https://www.google.com") != 0) { $.facebox(function() { $.get('events/' + event.id, function(data) { $.facebox(data) } ); }) return false; } return false; } 

好吧,因为看起来这不会得到解答我的解决方案是切换到一个非常相似的不同的上下文菜单插件(http://www.trendskitchens.co.nz/jquery/contextmenu/)导致完整日历出现任何问题。 这不是解决任何问题阻止此插件使用完整日历,但它是一个修复程序,让我的程序正常运行。

对于那些不想更改插件的人来说,修复上下文菜单的问题,修改了我修改的jquery.contextMenu.js的可拖动性

从:

 $(this).mousedown( function(e) { var evt = e; evt.stopPropagation(); $(this).mouseup( function(e) { e.stopPropagation(); var srcElement = $(this); $(this).unbind('mouseup'); if (evt.button == 2) { 

 $(this).mousedown( function(e) { var evt = e; evt.stopPropagation(); $(this).mouseup( function(e) { if (evt.button == 2) { e.stopPropagation(); var srcElement = $(this); $(this).unbind('mouseup'); 

这会阻止上下文菜单插件在左键单击时执行任何操作,仅在右键单击时执行。

Interesting Posts