2010-05-11 14 views
6

Tôi có một jquery fullcalendar. Tôi muốn kích hoạt jquery QTip (hoặc giải pháp jquery khác (chẳng hạn như hộp đèn)) khi tôi nhấp vào một ngày để hiển thị danh sách các tùy chọn. Câu hỏi này tương tự như this question already posted, tuy nhiên đủ khác nhau để đảm bảo một câu hỏi mới.Kích hoạt jQuery Qtip trên FullCalendar ngày Bấm

Có một event callback cho điều này nhưng tôi không chắc chắn làm thế nào để tích hợp này với 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'); 

    } 
}); 

Điều này rõ ràng sẽ trả về cảnh báo và thay đổi màu sắc của màu đỏ di động nhấp vào.

Dưới đây là một ví dụ khác cho thấy QTip được tích hợp để di chuột lên các sự kiện.

$('#calendar').fullCalendar({ 
    ... 
    eventRender: function(event, element, view) 
    { 
     element.qtip({ content: "My Event: " + event.title }); 
    } 
    ... 
}); 

Ví dụ này cho thấy gọi lại di chuột được sử dụng để kích hoạt QTIP.

Bây giờ tôi chỉ cần phải kết hợp hai ví dụ này ...

CẬP NHẬT 26/05/2010

Craig trên các diễn đàn Qtip đã đề nghị sử dụng gọi lại viewDisplay như một thay thế cho các callback DayClick mà dường như đang gây ra tất cả các loại vấn đề. (Khóa trình duyệt trở nên nổi bật nhất).

Here is the post:

Đây là mã:

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

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

Phương pháp này cho thấy một tooltip khi một ngày được nhấp. Một vài vấn đề tuy nhiên.

  1. Theo như tôi có thể nói không có thông tin về ngày có thể truy cập được qua gọi lại này, khiến bạn khó có thể hiển thị chú giải cụ thể cho ngày được nhấp.
  2. Không có thông tin nhấp chuột X và Y có thể truy cập được qua lần gọi lại này khiến không thể đặt đầu bên cạnh ngày được nhấp.

Tất cả trợ giúp đều được đánh giá cao!

Cảm ơn,

Tim

Trả lời

7

này diễn ra như css được áp dụng cho các Qtip.

$.fn.qtip.styles.tipstyle = { 
    width: 400, 
    padding: 0, 
    background: '#FFFFFF', 
    color: 'black', 
    textAlign: 'center', 
    border: { 
     width: 3, 
     radius: 4 
    }, 
    tip: 'bottomMiddle', 
    name: 'dark' 
} 

Và đây là chức năng 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 
      } 
     }); 
    } 
} 

Các câu lệnh if bên trong hàm dayClick đảm bảo rằng Qtip không được tạo ra mỗi khi bạn click vào cùng ngày.

Một vấn đề nhỏ có thể xảy ra, là nếu bạn muốn truy cập một số dữ liệu sự kiện của mình trong hàm dayClick. Nhưng một lần nữa có thể có cách giải quyết cho điều đó là tốt.

Chúc mừng, Lionheart

+0

Hey LionHeart. Bạn là một nhà vô địch! Wow, cảm ơn bạn rất nhiều. Điều này khá tuyệt vời và hoạt động gần như hoàn hảo. Một điều nhỏ ... Tôi cần tránh kích hoạt qtip nếu 'allDay' là sai từ sự kiện gọi lại 'dayClick'. Tôi có thể truy cập dữ liệu nhưng làm cách nào để thêm dữ liệu vào câu lệnh if? Cảm ơn một lần nữa, Tim – Tim

+0

Xem nếu công trình này: Thay đổi if (typeof $ (this) .data ("qtip") == "đối tượng"!) { Để if (typeof $ (this) .data ("qtip")! == "đối tượng" && allDay) { – Lionheart

+0

Hoàn hảo Lionheart !!! Tôi không thể cảm ơn đủ! – Tim

1

tôi thấy hai khả năng có thể làm việc ra. Một, bạn thêm div vô hình vào tài liệu, 20px x 20px hoặc hơn. Trong ngày bấm gọi lại, bạn định vị ở giữa ô bảng trong ngày đang được đề cập (hãy giữ nó bằng phương tiện $('td.fc-day' + dayNr)) và làm cho nó hiển thị (bạn cũng có thể định vị nó ở con trỏ chuột). Sau đó, gọi click() trên đó để làm cho chú giải công cụ xuất hiện.

Khả năng thứ hai: Bạn gọi qtip trên mỗi ô bảng (theo số $('div.fc-content').find('td') hoặc hơn) và không sử dụng dayClick. Hoặc, bạn kết hợp cả hai ý tưởng và kích hoạt sự kiện cho qtip trong cuộc gọi lại dayClick.

Tôi sẽ tìm kiếm một khả năng, tôi đoán, bởi vì nó liên quan đến ít người nghe sự kiện hơn.Tuy nhiên, nó giả sử bạn có cùng một tooltip bất kể ngày cụ thể (nhưng tooltip cũng có thể được cấu hình trước khi bạn hiển thị nó).

Hy vọng có ý nghĩa gì.

+0

Xin chào, Tôi cố gắng để hiểu được những giải pháp đầu tiên bạn nói về. Là div 20px được sử dụng để kích hoạt QTip. Nó chỉ kích hoạt trên Divs? Sau khi xem bài đăng này http: // stackoverflow.com/questions/1944238/popup-for-full-calendar-in-jquery/2528841 # 2528841 Tôi đã hy vọng giải pháp sẽ đơn giản hơn rất nhiều. Cảm ơn Tim – Tim

+0

Xin chào, có, các giải pháp này hơi phức tạp. Tôi chưa bao giờ làm việc với FullCalendar, có lẽ đó là lý do tại sao. Bạn có quyền đó, div được sử dụng để kích hoạt QTip. Nó không chỉ kích hoạt trên Divs, tuy nhiên. Có lẽ ai đó với một số kinh nghiệm FC có thể giúp đỡ, xin lỗi đó là tất cả những gì tôi có cho thời điểm này. –

+0

Chúc mừng Tom! Tôi đánh giá cao sự giúp đỡ của bạn :) – Tim

1

Không biết chính xác những gì bạn muốn hiển thị trong tooltip, nhưng bạn không thể sử dụng này:

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

Trong callback 'này' là <td> trong ngày nhấp. Có lẽ làm một chức năng để render html dựa trên 'date' và gọi nó là từ cò qtip:

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

Xin chào, Điều này gần như là nó, tuy nhiên Qtip không hoạt động như mong đợi. Khi tôi nhấp vào một ngày, không có gì xảy ra. Khi tôi di chuyển chuột và sau đó di chuột qua ngày đó, Qtip đã kích hoạt. Điều này phải vì nó chỉ kích hoạt khi di chuột qua. Làm thế nào tôi có thể sửa lỗi này. Tôi đã xem tài liệu của nó, nhưng vẫn tiếp tục gặp trình duyệt của tôi khi tôi cố thực hiện nó. Vui lòng trợ giúp, Cảm ơn Tim – Tim

1

tôi đã không được sử dụng qTip phải trung thực, nhưng theo tài liệu của nó tùy chọn 'show' xác định thời gian hiển thị tooltip, nó dường như được thiết lập để 'mouseover' như mặc định, vì vậy hãy thử thay đổi nó để nghe tiếng 'click', như thế này:

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

Rất tiếc, công việc này không hoạt động. Nhấp vào một ô một lần không làm gì cả. Việc nhấp vào ô đó cùng một lần nữa sẽ ngăn cản trình duyệt trong khoảng 10 giây? Điều này là như nhau cho tất cả các ngày trong bảng. Không có Qtip xuất hiện mặc dù. – Tim

2

tôi đang làm việc với fullCalendar và Qtip cho một tuần nay, và với tôi giải pháp của knepe nên làm việc trong trường hợp lý tưởng.

Bạn có thể kiểm tra trước xem chức năng có thực sự được gọi hay không. Hãy thử một cái gì đó như:

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

Nếu việc nhấp vào một ngày mang đến cho bạn một cảnh báo với ngày đó, thì vấn đề nằm với thực hiện Qtip. Nếu bạn không nhận được cảnh báo, sự cố xảy ra với việc triển khai fullCalendar.

Theo đề xuất của knepe, 'show: click' sẽ hiển thị Qtip. Nhưng nếu nó không phải là, hãy thử:

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

Cuối cùng, đừng quên kiểm tra các tài liệu: http://craigsworks.com/projects/qtip/docs/reference/#show

+0

Xin chào Lionheart, Cảm ơn bạn đã đăng bài. Tôi đã xác nhận rằng cuộc gọi lại FullCalendar dayClick đang hoạt động hoàn hảo. Nó có vẻ là một vấn đề với Qtip. Các triệu chứng là: Lần nhấp của người dùng vào ô ngày. Chẳng có gì xảy ra. Người dùng nhấp vào ô cùng ngày đó, trình duyệt bị treo. Trên máy nhanh, nó sẽ hiển thị Qtip sau khoảng 10 giây. Trên các máy chậm hơn, trình duyệt thông báo cho người dùng biết rằng tập lệnh đang khiến hệ thống chậm. Rõ ràng là có một số vòng lặp khó chịu xảy ra ở đây, nhưng tôi đang thua lỗ để gỡ lỗi nó. Bất kỳ đề xuất nào vẫn sẽ được đánh giá cao. – Tim

+0

Một gợi ý trên diễn đàn Qtip đã được sử dụng gọi lại viewDisplay. Một cái gì đó tôi sẽ không bao giờ nghĩ đến. Bài đăng có tại đây http://craigsworks.com/projects/forums/thread-google-calendar-like-bubble-for-jquery-fullcalendar. Tôi sẽ sửa đổi câu hỏi ban đầu để bao gồm các phát hiện mới nhất trong thời gian ngắn. – Tim

+0

Điều Craig đề xuất hữu ích khi bạn phải áp dụng Qtip cho các sự kiện (ví dụ: các dải được hiển thị trong ngày td). Những gì tôi nhận được từ các yêu cầu ban đầu của bạn, là bạn yêu cầu Qtip xuất hiện trên nhấp chuột trong một ngày (tức là ngày td chính nó). Tôi đã nghĩ ra một giải pháp nhỏ cho bạn. Xem nếu nó hoạt động. Nó được đưa ra dưới đây. – Lionheart