2009-05-26 29 views
8

Tôi gặp vấn đề với fancybox.
Tôi muốn viết một chức năng sẽ chạy khi mở hộp ưa thích. Làm thế nào và khi nào nên gọi hàm?Jquery - fancybox và gọi lại

Ví dụ:

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

Nếu mọi người đến đây và đang tìm kiếm cuộc gọi lại cho phiên bản mới của Fancybox: hãy kiểm tra thuộc tính "onComplete". – AsTeR

+6

Đối với fancybox phiên bản 2 hoặc cao hơn, nó đã được thay đổi thành afterLoad. http://fancyapps.com/fancybox/#docs – coderates

Trả lời

24

Thay vì sử dụng myFunc()myFunc. Trong javascript, một hàm có parens (và/hoặc args) có nghĩa là bạn muốn gọi nó. Một tên hàm mà không có họ có nghĩa là bạn chỉ muốn một tham chiếu đến chức năng đó (mà có lẽ những gì Fancybox muốn từ bạn)

2

Nó nên là: -

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

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

Hoặc, bạn có thể thực hiện một chức năng ẩn danh .. .

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

trên thực tế, về kiểm tra các tài liệu, bạn có một lỗi đánh máy trong danh sách lựa chọn của bạn ...

bạn có callBackOnShow nhưng nó phải là callbackOnShow (thấp hơn trường hợp b) Trường hợp

2
'callbackOnShow': myFunc 

thấp hơn b là các tùy chọn là trường hợp nhạy cảm, và không có dấu ngoặc trên MyFunc, như bạn muốn vượt qua các chức năng như một lựa chọn, không gọi nó.

10

này hoạt động

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

Siêu đăng bài, Tankx – Hearaman

+2

Tôi tự hỏi, tại sao các cuộc gọi lại ban đầu không hoạt động: http://fancyapps.com/fancybox/#docs – mirelon

9

Cách mới nhất làm thế nào để làm cho nó hoạt động được sử dụng afterShow hoặc beforeShow:

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

Tôi tải mẫu đăng ký thông qua ajax và tôi cần phải kích hoạt form-validation. Trong cả hai trường hợp (trước và sau), nội dung đã được tải.

0

Khi tiêu đề của bạn cho biết "Jquery - fancybox và gọi lại", bạn có thể hoàn thành danh sách các tùy chọn gọi lại cho plugin fancybox 2 được tìm thấy trong tab callbacks.

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

Nếu bạn sử dụng Fancybox cũ, có thể nâng cấp lên fancybox2 như plugin mới có nhiều tính năng tốt hơn, với kiểm soát nhiều hơn.

Các vấn đề liên quan