首页 > 解决方案 > 我的完整日历只列出了我在 for 循环中拥有的 3 个事件中的 1 个?

问题描述

我在上下文中输入了完整的日历,其中仅列出了 1 个事件,没有列出其他事件

 /*  Initialize the calendar  */
        var ide = document.getElementsByName("id");
        var fecha = document.getElementsByName("fecha");
        var nombre = document.getElementsByName("nombre");
        var horaInicio = document.getElementsByName("horaInicio");
        var horaFin = document.getElementsByName("horaFin");
        var id="";
        var dia = "";
        var titulo = "";
        var inicio = "";
        var fin = "";

        var date = new Date();
        var d = date.getDate();
        var m = date.getMonth();
        var y = date.getFullYear();
        var form = '';
        var today = new Date($.now());
        var citas=[];
       for (var x = 0; x < nombre.length; x++) {
            var defaultEvents =[{
                    id: id + ide[x].value,
                    title: titulo + nombre[x].value,
                    start: dia + fecha[x].value + 'T' + inicio + horaInicio[x].value,
                    end: dia + fecha[x].value + 'T' + fin + horaFin[x].value
                }];
                citas.push(defaultEvents);
            } 

            var $this = this; 
            for (var i=0;i<citas.length;i++){
            $this.$calendarObj = $this.$calendar.fullCalendar({
                events: citas[i]
            });
            }

一开始我收集来自我的jsp文件的值,我创建一个for循环,在其中创建一个对象,在这个对象中,每个事件都会发生,然后我将它们添加到名称数组(citas)中,这将在我的控制台中成为我的结果 在此处输入图像描述

这就是它在我的控制台上显示的内容。在此之后,我创建了另一个 for 循环,该循环必须通过调用数组并列出每个位置来列出每个事件,结果它列出了 3 个事件中的 1 个

在此处输入图像描述

标签: javascriptarraysobjectfullcalendarfullcalendar-3

解决方案


我可以看到两个逻辑错误:

1)

var defaultEvents =[{ ... }]

这将创建一个包含对象的数组。然后将此数组推入citas数组。因此,您的事件结构是一个数组数组(其中每个数组包含一个对象)。但是 fullCalendar 需要一个对象数组。

所以把它改成

var defaultEvents = { ... }

反而。

2)

for (var i=0;i<citas.length;i++){
    $this.$calendarObj = $this.$calendar.fullCalendar({
        events: citas[i]
    });
}

这没有任何意义。您的代码在这里所说的是“循环遍历 citas 数组。对于数组中的每个项目,重新声明$calendarObj为新日历并将其citas作为事件的下一个数组”。

如您所见,这每次都会覆盖您的日历,因此您最终会得到一个日历,其中包含您添加到 citas 的最后一个数组条目 - 正如我们所见,它只包含一个事件。

如果您进行了我在第 1 点中提到的更改,那么设置日历以包含所有事件变得微不足道 - 只需将上述代码更改为:

$this.$calendarObj = $this.$calendar.fullCalendar({
    events: citas
});

推荐阅读