Javascript 使用jQuery、i'在js中创建日历上的事件;我被一只奇怪的虫子缠住了

Javascript 使用jQuery、i'在js中创建日历上的事件;我被一只奇怪的虫子缠住了,javascript,jquery,loops,Javascript,Jquery,Loops,我的代码中有一个奇怪的错误。事实上,我修改了遗留代码,但并不十分清楚,最终导致了这个问题。你可以在现场看到一个例子 基本上,我有一个日历,我需要延长多日活动,以便它们跨越正确的天数。除了一种情况外,一切都有效:如果一个月的第一天是一周的第一天。在这种情况下,跨越多天的事件仅在第一周缩短一天。我通过使用变通方法解决了这个问题 // There is a bug that happens only when the first day of the // month is the first da

我的代码中有一个奇怪的错误。事实上,我修改了遗留代码,但并不十分清楚,最终导致了这个问题。你可以在现场看到一个例子

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

// 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;
// }
如果您取消对行的注释,一切都可以正常工作,但显然这不是一个解决方案


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

更新了

好的,这次我明白了。您的支票在其他情况下是错误的:

        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) {

if(day>=startDay&&day startDay,它没有添加到days中的第一个单元格,并且curLine没有按时递增。下一行的第一个单元格最终被处理,curLine比它应该的小1。如果您控制台记录curLine和cellNum,您将看到它们是这样的,并且没有在它们应该排列的地方排列ld.通过修复,处理进入第一个单元格的内部状态,就像它应该的那样。

更新了

好的,这次拿到了。你的支票在另一种情况下是错的:

        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) {

if(day>=startDay&&day startDay,它没有添加到days中的第一个单元格,并且curLine没有按时递增。下一行的第一个单元格最终被处理,curLine比它应该的小1。如果您控制台记录curLine和cellNum,您将看到它们是这样的,并且没有在它们应该排列的地方排列ld.通过修复,处理进入第一个单元格的内部状态,就像它应该的那样。

不,这使得第一行长达26天:)这似乎是正确的,但如果你看看宽度,它被设置为2600%,应该是700%,这很好,你是对的。仍然不明白为什么(根据我的口味,它有点过于复杂)但是它是有效的,你帮了我很大的忙:)谢谢你的添加,现在它不起作用的原因已经很清楚了:)(仍然认为有一种更简单的方法可以做到这一点,但我会坚持“如果它没有坏,就不要修复它”规则)不,这使得第一行长达26天:)这似乎是正确的,但如果你看看宽度,它被设置为2600%,应该是700%,你是对的。仍然不明白为什么(对于我来说,这是一个有点过于复杂的解决方案),但它是有效的,你帮了我很大的忙:)谢谢你的添加,现在它不起作用的原因已经很清楚了:)(仍然认为有一个更简单的方法可以做到这一点,但我会坚持“如果它没有损坏,就不要修复它”的规则)