以下是完整转载演示的jsfiddle:
警告:当您点击"下载"示例上的按钮可能会导致浏览器崩溃/或标签崩溃。
我有
我在alert()
函数中添加了convertArrayOfDatesToICSFormat()
,似乎不断调用错误的数据:
var byday = convertArrayOfDatesToICSFormat(getArrayOfDates(getCourseDates(data)));
eventIcal += 'RRULE:FREQ=WEEKLY;UNILT=20141129T000000;WKST=SU;BYDAY=' + byday + '\n';
如果你在jsfiddle上测试这个例子,你会注意到在经过一些成功的循环之后警报中的内容开始在' Mon'之间来回传递。和周一,周三'它应该通过其他的。
为什么它会卡在这个位置?通过控制台手动测试功能似乎表明它正常工作。报告没有错误,这让我感到困惑。
最终调用可能的问题函数的代码:
被调用的代码不断循环。
function convertArrayOfDatesToICSFormat(date) {
alert(date);
var results = [];
for (i = 0; i < date.length; ++i) {
switch (date[i]) {
case 'Mon':
results.push('MO');
break;
case 'Tues':
results.push('TU');
break;
case 'Wed':
results.push('WE');
break;
case 'Thur':
results.push('TH');
break;
case 'Fri':
results.push('FR');
break;
case 'Sat':
results.push('SA');
break;
case 'Sun':
results.push('SU');
break;
default:
results.push('Days of the week incorrect');
}
}
return results.join();
}
我被困在这里。
答案 0 :(得分:3)
你的问题是你的循环变量。您不会在函数中声明变量i
,因此它们是全局变量(附加到窗口对象)。您的convertArrayOfDatesToICSFormat
函数将此全局变量设置为0,然后将其增加到日期数组的长度。当我们回到createAllEvents
时,它不再是您对数据数组所期望的值。你永远不会到达数据数组的末尾,所以你一直走到崩溃浏览器。更改for
循环以将变量本地声明为您的函数。例如:
for (var i = 0; i < data.length; ++i) {
甚至:
var i;
for (i = 0; i < data.length; ++i) {