使用jQuery在js中创建日历上的事件,我遇到了一个奇怪的错误

时间:2012-08-30 21:10:17

标签: javascript jquery loops

我的代码中遇到了一个奇怪的错误。实际上我修改了遗留代码,这些代码并不是很清楚,最终导致了这个问题。您可以看到实时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;
// }

如果你取消注释一切都行,但显然这不是一个解决方案。

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

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,您将看到它们是这样的,并且不会排列它们应该的位置。通过修复,处理进入第一个单元格的内部条件,就像它应该的那样。