我的代码中遇到了一个奇怪的错误。实际上我修改了遗留代码,这些代码并不是很清楚,最终导致了这个问题。您可以看到实时here in a 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;
// }
如果你取消注释一切都行,但显然这不是一个解决方案。
我需要对这个问题有一些新的看法,可能是整个事情下面的概念是错的,我应该从头开始,但是当我找不到解决方案时,我很生气。
答案 0 :(得分: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!
天&gt; startDay需要是day&gt; = startDay。然后一切正常。
因为循环初始检查是这种情况:
if (day >= startDay && day <= endDay) {
后面的检查是白天&gt; startDay,它错过了添加第一个单元格,并且,curLine不会按时增加。来自下一行的第一个单元最终被处理,curLine比它应该小1。如果您控制台记录curLine和cellNum,您将看到它们是这样的,并且不会排列它们应该的位置。通过修复,处理进入第一个单元格的内部条件,就像它应该的那样。