Триггер jQuery Qtip на FullCalendar dayClick
у меня есть jquery fullcalendar. Я хотел бы вызвать jquery QTip (или другое решение jquery (например, Лайтбокс)), когда я нажимаю на день, чтобы вызвать список опций. Этот вопрос похож на этот вопрос уже отвечал, однако достаточно разные, чтобы оправдать новый вопрос.
есть событие обратного вызова для этого, но я не уверен, как интегрировать это с jQuery Qtip...
$('#calendar').fullCalendar({
dayClick: function(date, allDay, jsEvent, view) {
if (allDay) {
alert('Clicked on the entire day: ' + date);
}else{
alert('Clicked on the slot: ' + date);
}
alert('Coordinates: ' + jsEvent.pageX + ',' + jsEvent.pageY);
alert('Current view: ' + view.name);
// change the day's background color just for fun
$(this).css('background-color', 'red');
}
});
этот очевидно, вызывает оповещения и изменяет цвет нажатой ячейки красного цвета.
вот еще один пример, показывающий, что QTip интегрируется для наведения курсора на события.
$('#calendar').fullCalendar({
...
eventRender: function(event, element, view)
{
element.qtip({ content: "My Event: " + event.title });
}
...
});
в этом примере показан обратный вызов наведения, используемый для запуска QTIP.
Теперь мне нужно объединить эти два примера...
обновление 26/05/2010
Крейг на форумах Qtip предложил использовать обратный вызов viewDisplay в качестве альтернативы Обратный вызов DayClick, который, кажется, вызывает всевозможные проблемы. (Блокировка браузера является наиболее заметным).
вот код:
viewDisplay: function() {
var calendar = $(this);
$(this).qtip({
content: 'TEST',
position: {
my: 'top center',
at: 'top center'
},
show: 'click',
hide: 'click',
style: {
tip: true
}
})
},
этот метод показывает всплывающую подсказку при выборе дня. Однако несколько проблем.
- насколько я могу судить, нет никакой информации о дате, доступной через этот обратный вызов, что затрудняет отображение подсказки, специфичной для даты нажатый.
- нет информации о кликах X и Y, доступной через этот обратный вызов, что делает почти невозможным поместить наконечник рядом с датой щелчка.
вся помощь очень ценится!
спасибо,
Тим
6 ответов
это идет как css для применения к Qtip.
$.fn.qtip.styles.tipstyle = {
width: 400,
padding: 0,
background: '#FFFFFF',
color: 'black',
textAlign: 'center',
border: {
width: 3,
radius: 4
},
tip: 'bottomMiddle',
name: 'dark'
}
и это функция dayClick:
dayClick: function(date, allDay, jsEvent, view) {
if (typeof $(this).data("qtip") !== "object") {
$(this).qtip({
content: {
prerender: true,
text: "Hello World"
},
position: {corner: {tooltip: 'bottomMiddle', target: 'topMiddle'}},
style: {
name: 'tipstyle'
},
show: {
when: {event: 'click'},
ready: true
},
hide: {
fixed: true
}
});
}
}
оператор if внутри функции dayClick гарантирует, что Qtip не создается каждый раз, когда вы нажимаете на ту же дату.
одна небольшая проблема, которая может возникнуть, если вы хотите получить доступ к некоторым данным событий внутри функции dayClick. Но опять же, для этого также может быть обходной путь.
Ура, Львиное сердце!--3-->
Я работаю с fullCalendar и Qtip уже неделю, и для меня решение knepe должно работать в идеальном случае.
вы можете сначала проверить, действительно ли функция вызывается или нет. Попробуйте что-то вроде :
$('#calendar').fullCalendar({
dayClick: function(date, allDay, jsEvent, view) {
alert(date);
}
});
если нажатие на день дает вам предупреждение с этой датой, то проблема заключается в реализации Qtip. Если вы не получите предупреждение, проблема заключается в реализации fullCalendar.
как предложил knepe, "показать: нажмите" должен показывать Qtip. Но если это не так, попробуйте :
show: { when: { event: 'click' } }
и наконец, не забудьте проверить документы : http://craigsworks.com/projects/qtip/docs/reference/#show
Если всплывающее окно не работает, попробуйте использовать более старую версию jQuery.
Я пробовал с jquery-1.4, и теперь он работает. Я пробовал с jquery-1.2.6, и он работает отлично.
посмотреть обсуждение использования старого jquery для работы qtips с fullcalendar
Я вижу две возможности, которые могут сработать. Во-первых, вы добавляете невидимый div
в документе, в 20px раз в 20px и так. В день нажмите обратный вызов, вы позиционируете, что в середине дня ячейки таблицы в вопросе (получить его с помощью $('td.fc-day' + dayNr)
) и сделать его видимым (вы также можете разместить его на указателе мыши, возможно). Тогда звоните click()
на нем появится всплывающая подсказка.
вторая возможность: вы звоните qtip
на каждой ячейке таблицы (по $('div.fc-content').find('td')
или так) и не использовать dayClick
на всех. Или вы объединяете обе идеи и запускаете событие для qtip в dayClick
обратный.
Я бы пошел на возможность один, я думаю, потому что он включает в себя меньше слушателей событий. Однако предполагается, что у вас есть одна и та же подсказка независимо от конкретного дня (но подсказку также можно настроить перед ее отображением).
надеюсь, что это имеет смысл.
не знаю точно, что вы хотите показать в подсказке, но вы не можете использовать это:
$('#calendar').fullCalendar({
dayClick: function(date, allDay, jsEvent, view) {
$(this).qtip({ content: 'some html content' });
}
});
вызов 'это' - это <td>
нажатого день. Возможно, сделайте функцию для рендеринга html на основе "даты" и вызовите ее из триггера qtip:
$(this).qtip({ content: yourQtipRenderer(date) });
Я не использовал qTip, чтобы быть честным, но в соответствии с его документацией опция "показать" определяет, когда показывать всплывающую подсказку, похоже, по умолчанию установлено значение "mouseover", поэтому попробуйте изменить его на "click", например:
$('#calendar').fullCalendar({
dayClick: function(date, allDay, jsEvent, view) {
$(this).qtip({ content: 'some html content', show: 'click' });
}
});