2009-05-26 94 views
8

我有問題fancybox。
我想寫一個函數,當fancybox打開時將運行。如何以及何時調用該函數?jquery - fancybox和回調

實施例:

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

如果有人來到這裏,正在尋找Fancybox新版本的回調:請檢查「onComplete」屬性。 – AsTeR 2012-02-11 16:26:43

+6

對於fancybox版本2或更高版本,它已更改爲afterLoad。 http://fancyapps.com/fancybox/#docs – coderates 2012-05-22 17:11:01

回答

24

代替myFunc()使用myFunc。在JavaScript中,parens(和/或args)的函數意味着你想調用它。沒有他們的函數名字的意思是,你只是想給這個函數的引用(這可能是從你想要的東西的fancybox)

2

它應該是: -

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

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

或者,你可以匿名函數.. 。

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

其實,在檢查的文檔,你有一個錯字在你的選項列表...

你有callBackOnShow,但它應該是callbackOnShow(小寫B)

2
'callbackOnShow': myFunc 

小寫B作爲選項區分大小寫, 和myFunc的無支架,只要你想傳遞的功能作爲可選項,而不是調用它。

10

這工作

$("#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!'); 
    } 
}); 
9

最新方法如​​何使它工作使用afterShow或beforeShow:

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

我通過Ajax加載報名表,我需要啓用表單驗證。在這兩種情況下(之前和之後),內容已經被加載。

0

由於您的標題顯示爲「jquery - fancybox and callback」,您可以在選項卡回調下找到fancybox 2插件的完整回調選項列表。

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

如果您使用舊的fancybox,也許升級到fancybox2作爲新的插件有更好的功能,更多的控制。