2009-05-26 96 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作为新的插件有更好的功能,更多的控制。