2010-05-11 20 views
6

Ho un jquery fullcalendar. Vorrei attivare jquery QTip (o un'altra soluzione jquery (come un lightbox)) quando clicco su un giorno per visualizzare un elenco di opzioni. Questa domanda è simile a this question already posted, tuttavia abbastanza diversa da giustificare una nuova domanda.Trigger jQuery Qtip su FullCalendar dayClick

C'è un event callback per questo, ma non sono sicuro come integrare questo con 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'); 

    } 
}); 

Questo porta ovviamente avvisi e cambia il colore del rosso delle cellule cliccato.

Ecco un altro esempio che mostra l'integrazione di QTip al passaggio del mouse sugli eventi.

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

Questo esempio mostra il callback al passaggio del mouse utilizzato per attivare QTIP.

Ora ho solo bisogno di combinare questi due esempi ...

AGGIORNAMENTO 26/05/2010

Craig sui forum QTIP ha suggerito di utilizzare la richiamata viewDisplay come alternativa al callback DayClick che sembra causare tutti i tipi di problemi. (Bloccare il browser è il più importante).

Here is the post:

Ecco il codice:

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

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

Questo metodo mostra un tooltip quando un giorno viene cliccato. Alcuni problemi comunque.

  1. Per quanto posso dire non ci sono informazioni sulla data accessibili attraverso questa richiamata, rendendo difficile mostrare un suggerimento specifico per la data selezionata.
  2. Non ci sono informazioni sui clic X e Y accessibili tramite questa richiamata rendendo quasi impossibile inserire il suggerimento accanto alla data su cui si fa clic.

Tutto l'aiuto è molto apprezzato!

Grazie,

Tim

risposta

7

Questo va come CSS da applicare al Qtip.

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

E questa è la funzione 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 
      } 
     }); 
    } 
} 

L'istruzione if all'interno della funzione dayClick fa in modo che Qtip non si crea ogni volta che si fa clic alla stessa data.

Un piccolo problema che potrebbe sorgere è se si desidera accedere ad alcuni dei dati degli eventi all'interno della funzione dayClick. Ma ancora una volta ci può essere una soluzione anche per questo.

Cheers, LionHeart

+0

Hey LionHeart. Sei un campione! Wow, grazie mille. Questo è abbastanza sorprendente e funziona quasi perfettamente. Una piccola cosa ... Devo evitare di attivare il qtip se 'allDay' è falso dal callback dell'evento 'dayClick'. Sono in grado di accedere ai dati, ma come faccio ad aggiungerlo alla dichiarazione if? Grazie ancora, Tim – Tim

+0

Vedere se questo funziona: Change if (typeof $ (this) .data ("qtip") == "oggetto"!) { Per if (typeof $ (questo) .data ("qtip")! == "oggetto" && allDay) { – Lionheart

+0

Perfect Lionheart !!! Non posso grazie abbastanza! – Tim

1

vedo due possibilità che potrebbero funzionare fuori. Uno, si aggiunge un invisibile div al documento, 20 volte x 20px circa. Nel richiamo del clic del giorno, lo posizionate nel mezzo della cella della tabella del giorno in questione (afferratelo con $('td.fc-day' + dayNr)) e rendetelo visibile (potreste anche posizionarlo sul puntatore del mouse, forse). Quindi chiamare click() per visualizzare il suggerimento.

Seconda possibilità: chiami qtip su ogni cella di tabella (entro $('div.fc-content').find('td') o giù di lì) e non utilizzare affatto dayClick. In alternativa, si combinano entrambe le idee e si attiva l'evento per qtip nel callback dayClick.

Vorrei andare per possibilità uno, immagino, perché coinvolge meno ascoltatori di eventi.Tuttavia, si presuppone che tu abbia lo stesso suggerimento indipendentemente dal giorno specifico (ma il tooltip può anche essere configurato prima di mostrarlo).

Spero che abbia senso.

+0

Ciao, sto cercando di capire la prima soluzione hai parlato. Il div 20px utilizzato per attivare QTip. Si innesca solo su Divs? Dopo aver visto questo post http: // StackOverflow.it/questions/1944238/popup-per-full-calendar-in-jquery/2528841 # 2528841 Speravo che la soluzione sarebbe stata molto più semplice. Grazie Tim – Tim

+0

Ciao Tim, sì, queste soluzioni sono un po 'complicate. Non ho mai lavorato con FullCalendar, forse è per questo. Hai capito bene, il div è usato per attivare QTip. Tuttavia, non si attiva solo su Divs. Forse qualcuno con qualche esperienza FC può aiutarti, mi spiace, è tutto per il momento. –

+0

Cheers Tom! Apprezzo il tuo aiuto :) – Tim

1

Non so esattamente ciò che si desidera visualizzare nella descrizione, ma non si può utilizzare questo:

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

Nel callback 'questo' è il <td> del giorno fatto clic. Forse fare una funzione di rendering HTML in base alla 'data' e chiamarlo dal grilletto qtip:

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

Ciao, Questo è quasi, tuttavia Qtip non funziona come previsto. Quando clicco su un giorno, non succede nulla. Quando topo il mouse e topo il mouse su quel giorno cliccato, Qtip spara. Questo deve essere perché si attiva solo al passaggio del mouse. Come posso risolvere questo problema. Ho esaminato la sua documentazione, ma continuo a bloccare il browser quando provo a implementarlo. Please Help, Grazie Tim – Tim

1

non ho usato QTIP ad essere onesti, ma secondo la sua documentazione l'opzione 'spettacolo' determina quando mostrare il tooltip, sembra essere impostato su 'passaggio del mouse' di default, in modo da provare a cambiare a 'click', in questo modo:

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

Purtroppo questo non funziona. Fare clic su una cella una volta non fa nulla. Facendo clic sulla stessa cella si blocca di nuovo il browser per circa 10 secondi? Questo è uguale per tutti i giorni nella tabella. Tuttavia, non appare Qtip. – Tim

2

sto lavorando con fullCalendar e Qtip per una settimana, e per me la soluzione di knepe dovrebbe funzionare nel caso ideale.

È possibile controllare prima se la funzione viene effettivamente chiamata o meno. Provare qualcosa di simile:

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

Se cliccando su un giorno ti dà un avviso di tale data, allora il problema risiede con l'attuazione Qtip. Se non ricevi un avviso, il problema è con l'implementazione fullCalendar.

Come suggerito da knepe, 'show: click' dovrebbe mostrare il Qtip. Ma se non lo è, provare:

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

Infine, non dimenticate di controllare la documentazione: http://craigsworks.com/projects/qtip/docs/reference/#show

+0

Ciao Lionheart, Grazie per aver postato. Ho confermato che il callback FullCalendar dayClick funziona perfettamente. Sembra essere un problema con Qtip. I sintomi sono: L'utente fa clic sulla cella del giorno. Non accade nulla. L'utente fa clic sulla cella dello stesso giorno, il browser si blocca. Su macchine veloci esegue un Qtip dopo circa 10 secondi. Nelle macchine più lente il browser avvisa l'utente che lo script sta causando il rallentamento del sistema. C'è ovviamente un brutto ciclo in corso qui, ma sono in perdita per eseguirne il debug. Qualsiasi suggerimento sarebbe ancora molto apprezzato. – Tim

+0

Un suggerimento sui forum Qtip è stato quello di utilizzare il callback viewDisplay. Qualcosa a cui non avrei mai pensato. Il post è qui http://craigsworks.com/projects/forums/thread-google-calendar-like-bubble-for-jquery-fullcalendar. Modificherò la domanda iniziale per includere tra breve gli ultimi risultati. – Tim

+0

Ciò che Craig ha suggerito è utile quando devi applicare il Qtip sugli eventi (cioè strisce mostrate all'interno della data td). Quello che ho ottenuto dai requisiti iniziali, è che Qtip appaia al clic di un giorno (cioè la data td stessa). Ho ideato una piccola soluzione per te. Vedi se funziona. È indicato di seguito. – Lionheart