首页 > 解决方案 > 在 FullCalendar 中使用两个或多个单独的过滤器过滤事件

问题描述

我在 fullCalendar 中有一个由某些用户和不同客户提供的事件列表。我想按用户和客户端进行过滤,这样当单击一个用户时,只会显示他的事件。当单击该用户时,我单击了一个客户端,只有该客户端和用户的事件才会显示在日历上。

https://codepen.io/anon/pen/Owmqwe?page=1&

在我的示例中,当我单击 Jack 和 Petco 时,应该只显示 Jack 的 Petco 客户端事件。但问题是,当我点击 Jack 然后 Petco 时,所有 petco 事件都会显示出来。当我单击 Petsmart 然后单击 Jack 时,反之亦然。Jacks Petco 事件出现时,只有 Jack 的 petsmart 事件应该出现。

我相信问题出在 JS 的第 96 行,它与我不知道如何解决的 eventRender 返回语句有关,我阅读了 JQUERY 文档,但我仍然缺乏经验。

eventRender: function(event, element, view) {
          return $('input[type=radio][name=user_selector]:checked').val() === 'all' && $('input[type=radio][name=type_selector]:checked').val() === 'all'
                   || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0
                   || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0;

另一件事:我可以通过事件源数组过滤用户。但问题是:虽然我的示例是一个静态数组,但实际上我是动态地从数据库获取事件。这意味着我将无法过滤有新用户的事件,我将不得不不断手动更新代码。所以,除非有我想不出的解决方法,否则这对我不起作用。

通过添加和删除多个事件源来过滤事件

标签: javascriptjqueryfullcalendarfullcalendar-2

解决方案


&&和的错误使用||。我相信你想要这样的东西:

eventRender: function(event, element, view) {
      return ($('input[type=radio][name=user_selector]:checked').val() === 'all' || event.user.indexOf($("input[type=radio][name=user_selector]:checked").val()) >= 0)
          && ($('input[type=radio][name=type_selector]:checked').val() === 'all' || event.client.indexOf($("input[type=radio][name=type_selector]:checked").val()) >= 0);
    },

推荐阅读