2010-05-11 3 views
6

У меня есть jquery fullcalendar. Я хотел бы вызвать jquery QTip (или другое решение jquery (например, лайтбокс)), когда я нажимаю на день, чтобы открыть список опций. Этот вопрос похож на this question already posted, однако он достаточно разный, чтобы гарантировать новый вопрос.Триггер jQuery Qtip на FullCalendar dayClick

Существует event callback для этого, но я не уверен, как интегрировать это с 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.

Теперь мне просто нужно, чтобы объединить эти два примера ...

UPDATE 26/05/2010

Craig на QTIP форумах предложил использовать функцию обратного вызова viewDisplay в качестве альтернативы обратного вызова DayClick которая, как представляется, вызывает всевозможные проблемы. (Блокировка браузера является самой заметной).

Here is the post:

Вот код:

viewDisplay: function() { 
        var calendar = $(this); 

       $(this).qtip({ 
        content: 'TEST', 
        position: { 
       my: 'top center', 
       at: 'top center' 
        }, 
        show: 'click', 
        hide: 'click', 
        style: { 
       tip: true 
        } 
       }) 
     }, 

Этот метод показывает всплывающую подсказку, когда день щелкнул. Однако несколько проблем.

  1. Насколько я могу судить, нет никакой информации о дате, доступной через этот обратный вызов, что затрудняет отображение всплывающей подсказки, относящейся к указанной дате.
  2. Нет информации о доступе X и Y, доступной через этот обратный вызов, что делает невозможным поставить подсказку рядом с нажатой датой.

Вся помощь очень ценится!

Спасибо,

Tim

ответ

7

Это идет как 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 
      } 
     }); 
    } 
} 

Условный оператор внутри функции dayClick гарантирует, что QTIP не создается каждый раз вы нажмете на ту же дату.

Возможна небольшая проблема, если вы хотите получить доступ к некоторым данным вашего события в функции dayClick. Но снова это может быть обходным путем.

Приветствия, LionHeart

+0

Hey LionHeart. Вы чемпион! Вау, спасибо большое. Это довольно удивительно и работает почти отлично. Одна маленькая вещь ... Мне нужно избегать запуска qtip, если «allDay» является ложным из обратного вызова события «dayClick». Я могу получить доступ к данным, но как добавить их в оператор if? Еще раз спасибо, Tim – Tim

+0

Смотрите, если это работает: Изменить если (TypeOf $ (это) .data ("QTIP") == "объект") { К если ($ TypeOf (this) .data ("qtip")! == "object" && allDay) { – Lionheart

+0

Perfect Lionheart !!! Я не могу поблагодарить вас! – Tim

1

Я вижу две возможности, которые могли бы работать вне. Один, вы добавляете невидимый div к документу, 20px раз 20px или около того. В течение дня нажмите обратный вызов, вы разместите его в середине рассматриваемой ячейки дневного стола (возьмите его с помощью $('td.fc-day' + dayNr)) и сделайте его видимым (вы также можете поместить его указателем мыши). Затем наберите click(), чтобы появилась всплывающая подсказка.

Вторая возможность: вы вызываете qtip на каждую ячейку таблицы (по $('div.fc-content').find('td') или около того) и не используете dayClick. Или вы объединяете обе идеи и запускаете событие для qtip в обратном вызове dayClick.

Я бы выбрал возможность, по-моему, потому, что она включает меньше слушателей событий.Тем не менее, предполагается, что у вас есть одна и та же всплывающая подсказка, независимо от конкретного дня (но всплывающая подсказка также может быть настроена до ее показания).

Надеюсь, что имеет смысл.

+0

Здравствуйте, Я пытаюсь понять, первое решение, которое вы говорили. Является ли 20px div для запуска QTip. Это только срабатывает на Divs? После просмотра этого сообщения http: // stackoverflow.com/questions/1944238/popup-for-full-calendar-in-jquery/2528841 # 2528841 Я надеялся, что решение будет намного проще. Thanks Tim – Tim

+0

Привет, Тим, да, эти решения немного сложны. Я никогда не работал с FullCalendar, возможно, поэтому. Вы получили это право, div используется для запуска QTip. Однако это не только срабатывает на Divs. Может быть, кто-то с опытом работы в FC может помочь, извините, это все, что я получил на данный момент. –

+0

Cheers Tom! Я ценю вашу помощь :) – Tim

1

точно не знает, что вы хотите показать в подсказке, но вы не можете использовать это:

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
     $(this).qtip({ content: 'some html content' }); 
    } 
}); 

В обратном вызове «это» является <td> из щелкнутого дня. Может быть, сделать функцию для отображения HTML на основе «дата» и вызывать его из QTIP триггера:

$(this).qtip({ content: yourQtipRenderer(date) }); 
+0

Здравствуйте, Это почти все, однако Qtip работает не так, как ожидалось. Когда я нажимаю на День, ничего не происходит. Когда я вытаскиваю мышью, а затем нажимаю на тот щелчок, который срабатывает Qtip. Это должно быть потому, что он запускается только при наведении мыши. Как я могу это исправить. Я смотрел его документацию, но продолжаю разбивать свой браузер, когда пытаюсь его реализовать. Пожалуйста, помогите, Thanks Tim – Tim

1

Я не использую QTIP быть честным, но в соответствии с документацией опция «показать» определяет когда, чтобы показать всплывающую подсказку, это, кажется, установлен в «наведении курсора мыши» по умолчанию, так что попробуйте изменить его на «кнопку», как это:

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
     $(this).qtip({ content: 'some html content', show: 'click' }); 
    } 
}); 
+0

К сожалению, это не работает. Щелчок по ячейке один раз ничего не делает. Нажатие этой же ячейки снова останавливает браузер примерно на 10 секунд? Это одинаково для всех дней в таблице. Однако Qtip не появляется. – Tim

2

Я работаю с fullCalendar и QTIP в течение недели теперь, и для меня решение knepe должно работать в идеальном случае.

Вы можете сначала проверить, действительно ли функция вызвана или нет. Попробуйте что-то вроде:

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
     alert(date); 
     } 
}); 

Если при нажатии на день дает вам предупреждение с этой датой, то проблема заключается в QTIP реализации. Если вы не получите предупреждение, проблема связана с реализацией fullCalendar.

Как предложено knepe, 'show: click' должен показать Qtip. Но если это не так, попробуйте:

show: { when: { event: 'click' } } 

Наконец, не забудьте проверить документы: http://craigsworks.com/projects/qtip/docs/reference/#show

+0

Hi there Lionheart, Спасибо за сообщение. Я подтвердил, что обратный вызов FullCalendar dayClick работает отлично. Кажется, это проблема с Qtip. Симптомы: Пользователь нажимает на ячейку дня. Ничего не произошло. Пользователь нажимает на ячейку того же дня, зависает браузер. На быстрых машинах он отображает Qtip примерно через 10 секунд. На более медленных машинах браузер уведомляет пользователя о том, что сценарий вызывает замедление работы системы. Здесь, очевидно, существует несколько неприятных циклов, но я не могу их отладить. Любые предложения по-прежнему будут высоко оценены. – Tim

+0

Предложение на форумах Qtip заключалось в использовании обратного вызова viewDisplay. Что-то, о чем я бы никогда не подумал. Сообщение находится здесь http://craigsworks.com/projects/forums/thread-google-calendar-like-bubble-for-jquery-fullcalendar. Я исправлю первоначальный вопрос, чтобы в кратчайшие сроки включить последние результаты. – Tim

+0

Что предложил Крейг, полезно, когда вам нужно применить Qtip для событий (т. Е. Полоски, показанные внутри даты td). Что я получил от ваших первоначальных требований, вам нужно, чтобы Qtip появлялся по клику дня (т. Е. Сама дата td). Я разработал для вас небольшое решение. Посмотрите, работает ли это. Он приведен ниже. – Lionheart

Смежные вопросы