Есть ли способ сделать временной интервал недоступным для просмотра в fullcalendar?

#javascript #jquery #fullcalendar

#javascript #jquery #полный календарь

Вопрос:

Я хочу, чтобы временные интервалы, занятые событиями, были недоступны для просмотра. Если я просто установлю для свойства event editable значение false , это не поможет: я все еще могу щелкнуть рядом с этим событием. Есть ли способ сделать весь временной интервал, занимаемый событием, недоступным для кликабельности? Может быть, каким-то образом увеличить его ширину, чтобы охватить весь день (на самом деле, это было бы желательным поведением)?

Комментарии:

1. у вас есть пример.. я не могу представить проблему, с которой вы можете использовать эту скрипку jsfiddle.net/ppumkin/7MTdn в нем указан полный календарь. Просто измените и сохраните это, я попытаюсь помочь

2. Я изменил код там на тот, который я использую (ценная часть). URL /api/calendar/busy/time возвращает json с событиями. Мой календарь отображает эти события правильно, но он открывает всплывающее окно, если я нажимаю на день рядом с этими событиями. Вместо этого я хочу, чтобы это время было полностью занято: нажатие работает, только если вы нажимаете на часть дня, в которой еще нет записи календаря.

3. в каком представлении это должно быть? в повестке дня на месяц / неделю / день? Я попытаюсь что-нибудь придумать — в принципе, если в день есть событие, то вы не хотите, чтобы какой-либо клик срабатывал .. да? я полагаю, что так

4. Я почти понял — вам придется использовать какой-нибудь умный метод обнаружения, который я объясню позже. я уже сообщил об ошибке / особенности автору FC и предложил ему реализовать это.. он думает об этом .. но вскоре у меня будет решение для вас..

5. Это то, что вы хотели, или вы хотели, чтобы это работало при просмотре недели со временем??

Ответ №1:

Этот код сработает, если день занят каким-либо событием. Таким образом, теоретически вы можете заблокировать щелчок, выполнив return false; в этой логике.

http://jsfiddle.net/ppumkin/2QAY4/

Код, который выполняет волшебство, нуждается в jquery. и вам нужен этот фрагмент кода.

   dayClick: function(date, allDay, jsEvent, view) {

    if ($('div.fc-event').length > 0) {
        //
        var containerD = $(this).offset();
        var containerH = $(this).height();
        var mousex = jsEvent.pageX;

        $('div.fc-event').each(function(index) {
            var offset = $(this).offset();

            if (((offset.left   $(this).outerWidth()) > mousex amp;amp; offset.left < mousex) amp;amp; ((offset.top > containerD.top) amp;amp; (offset.top < (containerD.top   containerH)))) {

                alert($(this).html());
                //This will only fire if an empty space is clicked
                //This will not fire if an event is clicked on a day
            }
        });

    }
    else {
        //Put code here to do things if no events on a day
        alert('There are no events on this day');
    }
},
  

Ответ №2:

Ну, вы можете растянуть события на весь день, используя следующий CSS:

 .fc-event-skin { height: 60px; }
  

Но я бы назвал это обходным путем.

FullCalendar предназначен для отображения нескольких событий в день. Следовательно, столбцы достаточно малы, чтобы отображать перекрывающиеся события.

Лучшим решением для системы бронирования был бы календарь, который не поддерживает перекрывающиеся события. К сожалению, я ничего не могу порекомендовать.

Комментарии:

1. Я понял: я попытаюсь изменить его ширину таким же образом.

2. не сработает .. потому что вы все равно сможете щелкнуть по номеру дня, и щелчок иногда будет проходить через края… не очень хороший совет. События не являются дочерними элементами таблицы, а наложенными элементами div, вычисляемыми по координатам x и y в jscript FC … иногда это немного усложняет задачу. Если изменить размер календаря, ваши статические 60 пикселей больше работать не будут….

3. Я знаю, что вы написали «width», но, учитывая ваш пример, вы хотели увеличить высоту