2010-05-11 33 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