2009-05-26 35 views
8

Tengo un problema con fancybox.
Quiero escribir una función que se ejecutará cuando se abra el fancybox. ¿Cómo y cuándo llamar a la función?Jquery - fancybox y callback

Ejemplo:

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

Si la gente viene aquí y está buscando la devolución de llamada para la nueva versión de Fancybox: verifique el atributo "onComplete". – AsTeR

+6

Para fancybox versión 2 o superior, se cambió a afterLoad. http://fancyapps.com/freebox/#docs – coderates

Respuesta

24

En lugar de myFunc() uso myFunc. En javascript, una función con parens (y/o args) significa que desea llamarlo. Un nombre de función sin ellos significa lo que desea es una referencia a esa función (que es probablemente lo que quiere de ti FancyBox)

2

que debe ser: -

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

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

O bien, puede hacer que una función anónima .. .

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

en realidad, en la comprobación de la documentación, que tienen un error tipográfico en su lista de opciones ...

tienes callBackOnShow pero debe ser callbackOnShow (menor caso b)

2
'callbackOnShow': myFunc 

minúscula b ya que las opciones son mayúsculas y minúsculas, y no hay soportes en myFunc, como se desea pasar la función como una opción, no llamarlo.

10

Esto funciona

$("#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

Superpost, Tankx – Hearaman

+2

Me pregunto por qué las devoluciones de llamada originales no funcionaron: http://fancyapps.com/freebox/#docs – mirelon

9

La más nueva manera de cómo hacer que el trabajo está utilizando Aftershow o beforeShow:

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

Estoy cargando el formulario de inscripción a través de ajax y necesito para permitir la validación de formularios. En ambos casos (antes y después), el contenido ya está cargado.

0

Como su título dice "Jquery - fancybox and callback", puede obtener una lista completa de las opciones de devolución de llamada para el complemento de fancybox 2 que se encuentra en las pestañas de devolución de llamada.

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

Si su uso de la vieja FancyBox, tal vez de actualizar a fancybox2 como el nuevo plugin tiene mejores características, con más control.