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

问题描述 投票:5回答:7

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

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

javascript fullcalendar google-calendar-api
7个回答
5
投票

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

{ eventRender:function (event, element)}  

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

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


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;
        }
    }
});

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,


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();
        }
    });
}

那可能有用......


1
投票

添加适用于FullCalendar v3的解决方案(截至今日(2018年8月))。

为了防止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
}

1
投票

这对我有用

eventClick: function (event) {
    // Prevent redirect to Google Calendar
    event.jsEvent.cancelBubble = true;
    event.jsEvent.preventDefault();
}

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;
      },
© www.soinside.com 2019 - 2024. All rights reserved.