2012-05-24 17 views
6

Sto usando Fancybox nella mia applicazione. Ora per gestire l'evento close scriviamo qualcosa di simile:Come gestisco globalmente l'evento onClose di fancybox?

$(".fancybox").fancybox({onClose:function(){alert('blah');}} 

come si è visto in questa pagina doc:

http://fancyapps.com/fancybox/#docs

Tuttavia voglio scrivere qualcosa di comune e globale a tutti fancybox che ottiene ogni volta correre per qualsiasi fancybox. Come lo faccio? In breve, non voglio scrivere il codice di onClose su ogni fancybox e non voglio che dipenda dalla classe, id (ad esempio .fancybox in questo caso). Come lo faccio? Ho provato a scrivere:

$.fancybox({onClose:function(){alert('blah');}} 

ma non funziona e dalla documentazione sembra che questa è la funzione per l'apertura progammatically.

+0

La cosa più strana di questa domanda (e la sua risposta accettata) è che "onClose" non è un'opzione valida (callback) né per fancybox v1.3.xo v2.x. Ti riferisci a http://fancyapps.com/fancybox/#docs ma non c'è nulla a proposito dell'opzione API 'onClose' (' onClosed' è un'opzione valida per fancybox v1.3.x ed è documentata su fancybox.net) . – JFK

+0

@ JFK: Grazie per aver segnalato. Nemmeno mi rendevo conto che era un errore di battitura, e Antonio non si rendeva conto. Ma non è strano Era il mio errore di battitura e la risposta ha errore di battitura perché la mia domanda ha errore di battitura. Gli errori di battitura sono accettati. Ho accettato la risposta a causa del concetto che ha fornito e quando ho implementato il concetto sembra che funzioni. A proposito, quello che intendevo veramente era l'evento _primaClose_. Spero che ci sia in API;) –

risposta

5

Non sono sicuro che questa sia la soluzione migliore, ma sceglierei un modello di pubblicazione/sottotitolo quindi, nella tua casella di fantasia, dovresti fare qualcosa del genere.

$(".fancybox").fancybox(
{ onClose:function(){ 
       $(window).trigger('fancyboxClosed'); 
      } 
}); 

Poi, da qualche parte nel codice:

$(window).on('fancyboxClosed', function(){ 
    // Your global function for fancybox closed 
}); 

non so molto circa il vostro scopo, ma hanno in mente è sempre possibile passare una funzione denominata invece di un uno anonima in modo da sempre attiva la stessa funzione.

L'esempio sopra dovrebbe essere la strada da percorrere se si desidera fare cose diverse a seconda di ogni fancybox.

Inoltre, è possibile associare l'evento a qualsiasi oggetto desiderato. Utilizzate la finestra per comodità.

Modifica

È inoltre possibile modificare la vostra fonte fancybox per farlo (di modifica per 1.3.4) basta aggiungere $(window).trigger('fancyboxClosed'); a circa la linea 953.

+2

È buono ma significa comunque che ho scritto $ (window) .trigger ('fancyboxClosed'); per ciascuna delle fancybox. –

+0

Questo è il lato negativo. Puoi anche modificare fancybox per attivare l'evento ogni volta che onClose si verifica, quindi non devi scrivere nulla. –

+0

Ho aggiornato la risposta. –

2

Da quello che vedo, Fancybox non fornisce alcuna API per questo. Puoi invece usare un hack. L'ID è chiuso quando:

  1. pulsante di chiusura si fa clic (div con classe 'fancybox-vicino')
  2. sfondo nero si fa clic (div con classe 'fancybox-overlay')
  3. tasto Escape è premuto (e.which = 27)

Quindi, è possibile aggiungere un gestore di clic al corpo per verificare se event.target è .fancybox-close o .fancybox-overlay. Aggiungete anche un gestore di keydown per documentare per ascoltare se viene premuto il tasto di escape.

+0

un'altra opzione: 4. quando qualcosa chiama $ .fancybox.close(); – David162795

3

Tenta di utilizzare metodi

BeforeClose o afterClose

lavoro

Questo codice multa

$(".fancybox").fancybox({beforeClose:function(){alert('blah');}} 
0

ecco una soluzione decente per 1.3.4

$(document).delegate('#fancybox-close,#fancybox-overlay','click',function(){ 
    FancyBoxClosed(); 
}); 
$(document).keyup(function(e){ 
    if(e.keyCode == 27){ 
     if($('#fancybox-overlay').css('display') != 'none') 
      FancyBoxClosed(); 
    } 
}); 

function FancyBoxClosed() 
{ 
    //global callback for fancybox closed 
} 

Per una versione diversa da 1.3.4 ricontrolla i selettori di elementi fancybox per il pulsante di sovrapposizione e chiusura utilizzando libellula, lucciola o altro.