2010-01-24 21 views

Odpowiedz

10

Wersja, której używanie najwyraźniej nie pasuje do dokumentacji; Spojrzałem na źródło i zobaczyłem, że nazwy opcji były inne niż dokumenty online. I właśnie przetestowane następujące z 1.3RC2:

$(document).ready(function() { 

    function myStartFunction() { alert('fancy box opened'); } 

    $("a#inline").fancybox({ 
     'onStart': myStartFunction 
    }); 
}); 

Opcja szukasz jest „onStart” - alert w myStartFunction gaśnie za każdym razem, gdy otwieram okno. Nie jestem pewien, kiedy zmienili opcję, ale możesz spojrzeć na źródło dowolnej wersji, której używasz na dole, i zobaczyć, jak powinna ona zostać wywołana.

EDIT

Właśnie dwukrotnie sprawdzane na v1.2.5 - wersję używam - i wywołania zwrotne są rzeczywiście nazwany inaczej. callbackOnStart współpracuje z 1.25, ale jak już mówiłem, nie 1,3

+0

Haha, jeśli widzisz w źródle http://fancybox.net/dev/130/, nazywają "onStart" i etc od drugiego param. W ten sposób nie działa. Wielkie dzięki Erik ^^ –

3

Nie jestem pewien co masz na myśli przez wbudowanych funkcji. Fancybox ma wywołania zwrotne, które wywołują funkcje zdefiniowane przez użytkownika (które musisz sam wykonać). odczuwalna:

function myClose() 
{ 
    alert('close'); 
} 

function myStart() 
{ 
    alert('start'); 
} 

$("a#single_image").fancybox({ 
    'callbackOnClose': myClose, 
    'callbackOnStart': myStart 
// etc, etc.. 
}); 

Ewentualnie można sprawdzić div fancy_content aby sprawdzić, czy nie ma nic w środku. (jeśli tak, to fancybox jest otwarty).

if ($('#fancy_content:empty').length > 0) 
{ 
    // Is empty 
} 
2

to wydaje się działać dla mnie:

 isLoaded : function(){ 
      return $('#fancybox-content').html()!=''; 
     } 
8

spróbować użyć metody

beforeLoad, // Before loading 
afterLoad, // After loading 
beforeShow, // Before changing in current item 
afterShow, // After opening 

Ta praca kod porządku

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

OP mówi: "mówię o wersji 1.3.0 RC2' – JFK

4

Jeśli szukasz sposobu na ustalenie, czy fancybox jest otwarty, czy nie (zamiast zdarzenia uruchamianego po otwarciu ing fancybox), a następnie od wersji fancybox v2 można użyć właściwości $.fancybox.isOpen. Nie jest to udokumentowane (przynajmniej nie znalazłem żadnego odnośnika), ale działa.

przykład:

if(!$.fancybox.isOpen) { 
    $.fancybox.open({ 
     href: '#newsletter-campaign-popup', 
     height: 385, 
     width: 510, 
     type: 'inline' 
    }); 
} 

Powyższy przykład zapobiega otwarciu drugiego fancybox jeśli jest już otwarte.

1

Jeśli masz wiele div, że używasz do Fancybox, następujący kod może być lepsze i bardziej uniwersalne rozwiązanie:

if ($('.fancybox-opened').length == 0) { 
    //there is no fancybox opened at all 
} 

Należy również zauważyć, że zawartość fancybox może nie zawsze być pusty, nawet jeśli fancybox jest zamknięta.

12

$.fancybox.isOpen (bool) wskazuje, czy fancybox jest otwarty.

+0

lepsze i ładne rozwiązanie, powinno być odpowiedź –

+1

Tak, ale obawiam się, że działa tylko z Fancybox 2 – tillsanders

Powiązane problemy