如何在使用Google日历Feed时禁用FullCalendar中的事件链接?

时间:2011-10-18 20:28:03

标签: javascript fullcalendar google-calendar-api

我正在使用FullCalendar库从Google日历中加载我日历中的事件。 不幸的是,在将事件添加到日历后,它们是可点击的。当您点击该活动时,系统会自动将您重定向到Google日历页面以查看该特定活动,或者您是否拥有访问权限 - 直接编辑该活动。 虽然这对于事件管理非常有用,但我无法想象为什么网站访问者每次点击日历中的事件时都会被重定向到外部页面。

有没有办法在FullCalendar中禁用“点击打开”,覆盖链接打开到空的javascript函数调用也可以是一个选项。

8 个答案:

答案 0 :(得分:12)

FullCalendar网站上的文档引用了回调函数'eventClick':

http://arshaw.com/fullcalendar/docs/mouse/eventClick/

如果在事件对象上设置了url属性,则返回false会阻止浏览器访问事件URL。因此,当您初始化FullCalendar时,添加eventClick回调函数,其中包含......

$('#calendar').fullCalendar({
    eventClick: function(event) {
        if (event.url) {
            return false;
        }
    }
});

答案 1 :(得分:5)

可能值得在fullcalendar选项中尝试自己的事件渲染器:

{ eventRender:function (event, element)}  

为此,您需要自己编写所有渲染代码 - 可以从原始实现开始并根据需要进行调整。
没有试过这个谷歌日历实现,但已经使用它与自定义json根据需要打开或关闭href。

或者,你可以:
破解gcal.js文件,使其不在事件对象上设置href属性 或
在渲染之前拦截事件数据,并删除href属性。

答案 2 :(得分:4)

编辑文件gcal.js

events.push({
    id: entry['gCal$uid']['value'],
    title: entry['title']['$t'],
    //url: url,
    start: start,
    end: end,
    allDay: allDay,
    location: entry['gd$where'][0]['valueString'],
    description: entry['content']['$t']

删除行:url: url,

答案 3 :(得分:2)

老问题,但这里是我"修复"它

eventRender(event, element) {
    element.on('click', e => e.preventDefault());
}

这很可能会阻止您实施其他点击行为,例如在您点击时打开表单来编辑事件。

如果您为自己的Google日历活动添加了className,则可能需要按照这样做

eventRender(event, element) {
    element.on('click', e => {
        if (!!element.closest('.your-gcalendar-class-name').length) {
            e.preventDefault();
        }
    });
}

那可能有用......

答案 4 :(得分:1)

添加了一个从今天开始(2018年8月)适用于FullCalendar v3的解决方案。

要防止eventClick重定向到url中指定的events,只需使用.preventDefault(),如下所示:

eventClick: function( event, jsEvent, view ) {
    jsEvent.preventDefault();


    // click events previously defined will also be prevented
    // so, any alternate tasks (like showing modal) on eventClick must go here
}

答案 5 :(得分:1)

我发现这些解决方案不再适用于 v5.5.1

无论如何,另一种选择是使用 event.url空白 覆盖 eventDataTransform

这样,event.title 将被呈现为纯文本,因此与基于 eventClick 的输出不同,浏览器不会在底部显示 URL左/右角等

    eventDataTransform: function(event) {
        event.url = "";
        return event;
    }

答案 6 :(得分:0)

我在fullcalendar.fullcalendar.js编辑了sites/all/modules/fullcalendar文件 并注释出第12至17行,如:

 var options = {
      eventClick: function (calEvent, jsEvent, view) {
      /* if (settings.sameWindow) {
          window.open(calEvent.url, '_self');
        }
        else {
          window.open(calEvent.url);
        } */
        return false;
      },

答案 7 :(得分:0)

这对我有用

--user root