1

我在代码中遇到了一个奇怪的错误。实际上,我修改了不太清楚的遗留代码并最终遇到了这个问题。你可以在这里看到一个 fiddle的例子。

基本上我有一个日历,我需要延长多天的活动,以便它们跨越正确的天数。一切正常,但只有一种情况:如果一个月的第一天是一周的第一天。在这种情况下,跨越多天的事件仅在第一周缩短一天。我通过使用解决方法解决了这个问题

// There is a bug that happens only when the first day of the 
// month is the first day of the week. In that case events that start on the first of the month
// or multy day events that span from the previous month end up being a day too short in the 
// first week. So for example an event that lasted the full month was only six days in the first week.
// This workaround works for me, couldn't understand what's wrong.
// if (startDay === 1 && daysFirstWeek === 7) {
   // days += 1;
// }

如果您取消注释这些行一切正常,但显然这不是解决方案。

我需要对这件事有一些新的看法,可能整个事情背后的概念是错误的,我应该从头开始,但是当我找不到解决方案时我很生气。

4

1 回答 1

1

更新

好的,这次明白了。在另一种情况下,您的检查是错误的:

        if (cellNum !== 0) {
            // Extend initial event bar to the end of first (!) week.
            if (curLine === 0) {
                days++;
            }
        } else if (day > startDay && daysLeft !== 0) {    // WRONG CHECK HERE!

day > startDay 必须是 day >= startDay。然后一切正常。

之所以会出现这种情况,是因为循环初始检查:

if (day >= startDay && day <= endDay) {

由于后面的检查是 day > startDay,它错过了添加天数的第一个单元格,并且 curLine 不会按时递增。下一行的第一个单元格最终被处理,curLine 比它应该的少 1。如果您通过控制台记录 curLine 和 cellNum,您会看到它们是这样运行的,并且不会在应有的位置排列。通过修复,处理进入第一个单元格的内部条件,就像它应该的那样。

于 2012-08-30T21:28:09.680 回答