如何修复Uncaught TypeError:无法在fullcalendar中调用未定义的方法“ call”

时间:2019-07-25 08:15:08

标签: javascript fullcalendar phonegap fullcalendar-4

我打算使用phonegap开发应用程序,并且需要使用全日历的“可选”功能。该应用程序在手机上可以正常工作。但是将其安装到平板电脑后,点击任意日历都会显示此错误:

  

07-25 16:12:37.676:I / chromium(4707):[INFO:CONSOLE(128)]“未捕获的TypeError:无法调用未定义的方法'call'”,来源:file:/// android_asset / www / apis / fullcalendar / core / main.js(128)

为什么它仅在平板电脑上发生,但在我的手机上却能正常工作

这些是我在html中导入的脚本:

<link href='apis/fullcalendar/core/main.css' rel='stylesheet' />
<link href='apis/fullcalendar/daygrid/main.css' rel='stylesheet' />
<script src='apis/fullcalendar/core/main.js'></script>
<script src='apis/fullcalendar/interaction/main.js'></script>
<script src='apis/fullcalendar/daygrid/main.js'></script>

这就是我创建日历的方式

    var today = moment().format('YYYY[-]MM[-]DD');
    var eventList = new Array();

    $.each(
        holidayDateList,
        function(i,v) {
            var events = {
                title: holidayNameList[i],
                start: v,
                backgroundColor: "#8c8c8c"
            };

            eventList.push(events);
        });

    $.each(
        offdayServerDateList,
        function(i,v) {
            var events = {
                title: offdayServerReasonList[i],
                start: v
            };

            eventList.push(events);
        });

    $.each(
        offdayDateList,
        function(i,v) {
            var events = {
                title: offdayReasonList[i],
                start: v
            };

            eventList.push(events);
        });

    var calendarEl = document.getElementById('calendar');

    var calendar = new FullCalendar.Calendar(calendarEl, {
        plugins: [ 'interaction', 'dayGrid' ],
        defaultDate: today,
        editable: false,
        selectable: true,
        selectMirror: true,
        select: function(arg) {
            var isToday = moment(arg.start).format('YYYY[-]MM[-]DD') == today;
            var isAfterToday = moment(arg.start).isAfter(today);
            var isHolidayDate = holidayDateList.indexOf(moment(arg.start).format('YYYY[-]MM[-]DD')) >= 0;
            var isOffdayDate = offdayServerDateList.indexOf(moment(arg.start).format('YYYY[-]MM[-]DD')) >= 0;

            if((isAfterToday || isToday) && !isHolidayDate && !isOffdayDate) {
                $("#dialog-form").dialog("open");
            }
        },
        eventLimit: true,
        eventClick: function(info) {
            var isOffdayDate = offdayServerDateList.indexOf(moment(info.event.start).format('YYYY[-]MM[-]DD')) >= 0;

            if(isOffdayDate) {
                alert("Open delete reason dialog for " + moment(info.event.start).format('YYYY[-]MM[-]DD'));
            } else {
                alert(info.event.title);
            }
        },
        events: eventList
    });

    calendar.render();

更新:我将三星j5 pro(Android Oreo)用于我的手机测试设备,该设备可以正常工作。有问题的设备是我的三星银河标签3(android kitkat)。还尝试在设置为电话和桌子的nox播放器上安装应用程序。但也不能工作

1 个答案:

答案 0 :(得分:1)

似乎就像我在选项卡上运行代码时一样。 js无法识别Core / main.js中提供的任何matchs方法

在第107行上的matchs方法选择期间,我需要添加webkitMatchesSelector,以便在其他未定义的代码中使用该matchs方法。

原文:

var matchesMethod = Element.prototype.matches ||
Element.prototype.matchesSelector ||
Element.prototype.msMatchesSelector;

已更新:

var matchesMethod = Element.prototype.matches ||
Element.prototype.matchesSelector ||
Element.prototype.msMatchesSelector || 
Element.prototype.webkitMatchesSelector; // add this

参考:https://github.com/matsko/ng4-animations-preview/issues/1