2010-05-11 32 views
6

我有一個jquery fullcalendar。我想要觸發jquery QTip(或其他jquery解決方案(例如lightbox)),當我點擊一天以顯示選項列表時。這個問題類似於this question already posted,但是有足夠的差異來證明一個新的問題。在FullCalendar日觸發jQuery Qtip點擊

有這個一個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

克雷格在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點擊信息,因此幾乎不可能將提示放在點擊日期旁邊。

所有幫助非常感謝!

感謝,

回答

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函數中的某些事件數據。但同樣可以解決這個問題。

歡呼聲中,獅心王

+0

嘿LionHeart。你是冠軍!哇,謝謝你這麼多。這是相當驚人的,幾乎完美的作品。 一件小事......如果'dayClick'事件回調中'allDay'爲false,我需要避免觸發qtip。我能夠訪問數據,但是如何將它添加到if語句中?再次 感謝, 添 – Tim 2010-05-26 23:06:44

+0

見,如果這個工程: 變化 如果(typeof運算$(本)。數據( 「qtip」)== 「對象」!){ 要 如果(typeof運算$ (this).data(「qtip」)!==「object」&& allDay){ – Lionheart 2010-05-28 08:31:05

+0

完美的獅心!我不能夠感謝你! – Tim 2010-05-29 00:29:34

1

我看到,可以先制定出兩種可能性。一,你在文檔中添加一個看不見的div,20px乘20px左右。在當天的點擊回調中,您將該位置置於問題表格單元格中間(通過$('td.fc-day' + dayNr)獲取),並使其可見(也可以將其放置在鼠標指針處)。然後在它上面調用click()使工具提示出現。

第二種可能性:您在每個表格單元格上調用qtip(大約等於$('div.fc-content').find('td')),根本不使用dayClick。或者,您將這兩個想法結合起來並觸發dayClick回撥中的qtip事件。

我想去可能性之一,我猜,因爲它涉及更少的事件監聽器。但是,它假定您具有相同的工具提示,無論具體日期如何(但工具提示也可以在顯示之前進行配置)。

希望是有道理的。

+0

你好, 我想了解你所提到的第一個解決方案。是20px div用於觸發QTip。它只觸發Divs嗎? 看到這篇文章http:// stackoverflow後。com/questions/1944238/popup-for-full-calendar-in-jquery/2528841#2528841我希望解決方案會簡單得多。 謝謝 蒂姆 – Tim 2010-05-11 11:34:20

+0

嗨蒂姆,是的,這些解決方案有點複雜。我從來沒有使用FullCalendar,也許這就是爲什麼。你說的對,div用來觸發QTip。然而,它不僅觸發Divs。也許某些有FC經驗的人可以提供幫助,對不起,這是我現在所擁有的一切。 – 2010-05-12 05:51:13

+0

乾杯湯姆!我感謝你的幫助:) – Tim 2010-05-12 09:06:01

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火災。這一定是因爲它只能在鼠標上觸發。我怎樣才能解決這個問題。我一直在查看它的文檔,但是當我試圖實現它時,卻一直在崩潰瀏覽器。 請幫忙, 謝謝 蒂姆 – Tim 2010-05-14 22:18:20

1

我沒有被使用qTip是誠實的,但根據它的文檔「顯示」選項確定當顯示工具提示,它似乎被設置爲「鼠標懸停」爲默認,所以儘量將其更改爲「點擊」,像這樣:

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

可悲的是,這是行不通的。單擊一次單元格不會執行任何操作。點擊同一個單元再次停止瀏覽器約10秒?表中所有日子都一樣。沒有Qtip出現。 – Tim 2010-05-17 01:29:54

2

我與fullCalendar和Qtip工作了一個星期,現在,對我來說,膝蓋的解決方案應該在理想的情況下工作。

您可以先檢查函數是否真的被調用。 試着這麼做:

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

如果點擊每天爲您提供了該日期警報,那麼問題在於Qtip實施。如果您沒有收到警報,問題是使用fullCalendar實現。

正如膝蓋所示,'show:click'應顯示Qtip。但是,如果不是,請嘗試:

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

最後,不要忘記檢查文檔: http://craigsworks.com/projects/qtip/docs/reference/#show

+0

嗨,Lionheart, 感謝發佈。我已經確認FullCalendar dayClick回調工作正常。這似乎是Qtip的一個問題。 症狀如下: 用戶單擊日單元格。什麼都沒發生。用戶點擊同一天的單元格,瀏覽器掛起。在快速機器上,約10秒後呈現Qtip。在較慢的機器上,瀏覽器通知用戶腳本正在導致系統變慢。 顯然有一些令人討厭的循環在這裏進行,但我在調試它失敗。 任何建議仍將不勝感激。 – Tim 2010-05-25 23:53:24

+0

關於Qtip論壇的建議是使用viewDisplay回調。我從未想過的東西。該文章位於http://craigsworks.com/projects/forums/thread-google-calendar-like-bubble-for-jquery-fullcalendar。我會盡快修改原來的問題,以包括最新的發現。 – Tim 2010-05-26 00:44:57

+0

當你必須對事件應用Qtip(即在日期td內顯示的條帶)時,Craig提出的建議很有用。 我從你最初的要求中得到了什麼,你是否需要Qtip出現在一天的點擊(即td本身)。 我爲您設計了一個小型解決方案。看看它是否有效。它在下面給出。 – Lionheart 2010-05-26 07:01:52