2009-05-26 12 views
8

Mam problem z fancybox.
Chcę napisać funkcję, która będzie działać po otwarciu fancybox. Jak i kiedy zadzwonić do funkcji?Jquery - fancybox i callback

przykład:

function myFunc() { 
    alert("Opened!"); 
} 

$('.content a').fancybox({ 
    'hideOnContentClick': false , 
    'callBackOnShow': myFunc(), // This not working! It call function when page is loaded 
    'frameWidth': 920, 
    'frameHeight': 530 
}); 
+3

Jeśli ludzie przychodzą tutaj i szukają wywołania zwrotnego dla nowej wersji Fancybox: sprawdź atrybut "onComplete". – AsTeR

+6

Dla wersji fancybox 2 lub nowszej zmieniono ją na afterLoad. http://fancyapps.com/fancybox/#docs – coderates

Odpowiedz

24

Zamiast myFunc() zastosowanie myFunc. W javascript, funkcja z parens (i/lub args) oznacza, że ​​chcesz ją nazwać. Nazwa funkcji bez nich oznacza chcesz tylko odniesienie do tej funkcji (co jest chyba to, co fancybox chce od ciebie)

2

Powinno być: -

function myFunc() { 
    alert("Opened!"); 
} 

$('.content a').fancybox({ 
    'hideOnContentClick': false , 
    'callBackOnShow': myFunc, // no brackets 
    'frameWidth': 920, 
    'frameHeight': 530 
}); 

Albo można zrobić anonimową funkcję .. .

$('.content a').fancybox({ 
    'hideOnContentClick': false , 
    'callBackOnShow': function() { alert('hello'); }, 
    'frameWidth': 920, 
    'frameHeight': 530 
}); 
2

Właściwie na sprawdzeniu docs, masz literówkę w swoim liście opcji ...

masz callBackOnShow ale powinno być callbackOnShow (małe litery b)

2
'callbackOnShow': myFunc 

małe litery b jako opcje są wielkość liter, i żadne uchwyty na myFunc, jak chcesz przekazać funkcję jako opcja, nie nazwać.

10

Działa

$("#element").fancybox({ 
    onStart  : function() { 
     return window.confirm('Continue?'); 
    }, 
    onCancel : function() { 
     alert('Canceled!'); 
    }, 
    onComplete : function() { 
     alert('Completed!'); 
    }, 
    onCleanup : function() { 
     return window.confirm('Close?'); 
    }, 
    onClosed : function() { 
     alert('Closed!'); 
    } 
}); 
+0

Super post, Tankx – Hearaman

+2

Zastanawiam się, dlaczego oryginalne wywołania zwrotne nie działają: http://fancyapps.com/fancybox/#docs – mirelon

9

Ostatnio sposób jak zrobić to praca przy użyciu Aftershow lub beforeShow:

$("a#registrace").fancybox({ 
    beforeShow : function() { 
    alert('its working!'); 
    validate_reg_form(); 
    } 
}); 

wczytuję formularz rejestracyjny poprzez AJAX i muszę włączyć formularz walidację. W obu przypadkach (przed i po) treść jest już załadowana.

0

Jak mówi tytuł "Jquery - fancybox i oddzwanianie", można uzyskać pełną listę opcji oddzwaniania dla wtyczki fancybox 2 znalezionej pod wywołaniami karty.

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

Jeśli używasz starego fancybox, może upgrade do fancybox2 jako nowy plugin ma lepsze możliwości, większą kontrolę.