#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», но, учитывая ваш пример, вы хотели увеличить высоту