How to fix Uncaught TypeError: Cannot call method 'call' of undefined in fullcalendar
How to fix Uncaught TypeError: Cannot call method 'call' of undefined in fullcalendar
我正在使用 phonegap 开发应用程序,需要使用全日历 'selectable' 功能。这些应用程序在 phone 中运行良好。但是当安装到 tablet 时,点击任何日历都会显示此错误:
07-25 16:12:37.676: I/chromium(4707): [INFO:CONSOLE(128)] "Uncaught TypeError: Cannot call method 'call' of undefined", source: file:///android_asset/www/apis/fullcalendar/core/main.js (128)
为什么它只发生在 tablet 而在我的 phone 上它工作正常
这些是我在 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();
更新:我使用 samsung j5 pro (android oreo) 作为我的 phone 测试设备,该设备可以正常工作。有问题的设备是我的三星 galaxy tab 3(android kitkat)。还尝试在设置为 phone 和 table 的 nox 播放器上安装应用程序。但也不能工作
好像我 运行 我的标签上的代码。 js 无法识别 Core/main.js
中提供的任何匹配方法
我需要在第 107 行的匹配方法选择期间添加 webkitMatchesSelector,这样如果其他方法未定义,代码将使用该匹配方法。
原文:
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
我正在使用 phonegap 开发应用程序,需要使用全日历 'selectable' 功能。这些应用程序在 phone 中运行良好。但是当安装到 tablet 时,点击任何日历都会显示此错误:
07-25 16:12:37.676: I/chromium(4707): [INFO:CONSOLE(128)] "Uncaught TypeError: Cannot call method 'call' of undefined", source: file:///android_asset/www/apis/fullcalendar/core/main.js (128)
为什么它只发生在 tablet 而在我的 phone 上它工作正常
这些是我在 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();
更新:我使用 samsung j5 pro (android oreo) 作为我的 phone 测试设备,该设备可以正常工作。有问题的设备是我的三星 galaxy tab 3(android kitkat)。还尝试在设置为 phone 和 table 的 nox 播放器上安装应用程序。但也不能工作
好像我 运行 我的标签上的代码。 js 无法识别 Core/main.js
中提供的任何匹配方法我需要在第 107 行的匹配方法选择期间添加 webkitMatchesSelector,这样如果其他方法未定义,代码将使用该匹配方法。
原文:
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