2012-05-24 21 views
6

Tôi đang sử dụng Fancybox trong ứng dụng của mình. Bây giờ để xử lý các sự kiện gần chúng ta viết một cái gì đó như:Làm thế nào để xử lý toàn cầu trênClose sự kiện của fancybox?

$(".fancybox").fancybox({onClose:function(){alert('blah');}} 

như đã thấy trên trang doc này:

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

Tuy nhiên tôi muốn viết một cái gì đó chung và toàn cầu cho tất cả Fancybox mà được chạy mọi cho bất kỳ fancybox nào. Làm thế nào để làm điều đó? Trong ngắn hạn tôi không muốn viết mã của onClose trên mỗi fancybox và không muốn nó phụ thuộc vào lớp học, id (ví dụ: .fancybox trong trường hợp này). Làm thế nào để làm điều đó? Tôi đã cố gắng viết:

$.fancybox({onClose:function(){alert('blah');}} 

nhưng nó không hoạt động và từ tài liệu có vẻ như đây là chức năng mở progammatically.

+0

Điều kỳ lạ nhất về câu hỏi này (và câu trả lời được chấp nhận của nó) là 'onClose' không phải là tùy chọn hợp lệ (gọi lại) cho cả fancybox v1.3.x hoặc v2.x. Bạn tham khảo http://fancyapps.com/fancybox/#docs nhưng không có gì về tùy chọn 'onClose' API (' onClosed' là một tùy chọn hợp lệ cho fancybox v1.3.x mặc dù và nó được tài liệu tại fancybox.net) . – JFK

+0

@JFK: Cảm ơn bạn đã chỉ ra. Tôi cũng không nhận ra đó là lỗi chính tả mà Antonio cũng không nhận ra. Nhưng đó không phải là lạ. Đó là lỗi đánh máy của tôi và câu trả lời có lỗi đánh máy vì câu hỏi của tôi có lỗi chính tả. Typos được chấp nhận. Tôi chấp nhận câu trả lời do khái niệm mà anh ấy cung cấp và khi tôi thực hiện khái niệm, nó dường như đang hoạt động. Btw, những gì tôi thực sự có nghĩa là _beforeClose_ sự kiện. Tôi hy vọng rằng đó là có trong API;) –

Trả lời

5

Tôi không chắc đây có phải là giải pháp tốt nhất hay không nhưng tôi sẽ chọn một mẫu pub/sub để trong hộp thư ưa thích của bạn, bạn nên làm một cái gì đó như thế.

$(".fancybox").fancybox(
{ onClose:function(){ 
       $(window).trigger('fancyboxClosed'); 
      } 
}); 

Sau đó, ở đâu đó trong mã của bạn:

$(window).on('fancyboxClosed', function(){ 
    // Your global function for fancybox closed 
}); 

Tôi không biết rất nhiều về mục đích của bạn, nhưng có trong tâm trí bạn luôn có thể vượt qua một hàm có tên thay vì một người vô danh, do đó bạn luôn luôn kích hoạt cùng chức năng.

Ví dụ trên nên là cách để đi nếu bạn muốn thực hiện những điều khác nhau tùy thuộc vào từng hộp ưa thích.

Ngoài ra, bạn có thể đính kèm sự kiện vào bất kỳ đối tượng nào bạn muốn. Chỉ cần sử dụng cửa sổ để thuận tiện.

Sửa

Bạn cũng có thể chỉnh sửa mã nguồn Fancybox của bạn để làm điều đó (chỉnh sửa cho 1.3.4) chỉ cần thêm $(window).trigger('fancyboxClosed'); khoảng dòng 953.

+2

Nó là tốt, nhưng nó vẫn có nghĩa là tôi đã viết $ (cửa sổ) .trigger ('fancyboxClosed'); cho mỗi hộp ưa thích. –

+0

Đó là nhược điểm. Bạn cũng có thể hack fancybox để kích hoạt sự kiện bất cứ khi nào onClose xảy ra, do đó bạn không phải viết gì cả. –

+0

Tôi đã cập nhật câu trả lời. –

2

Từ những gì tôi nhìn thấy, Fancybox không cung cấp bất kỳ API cho điều đó. Thay vào đó, bạn có thể sử dụng hack. Các hộp đèn được đóng lại khi:

  1. nút đóng được nhấp (div với lớp 'Fancybox-gần')
  2. nền đen được nhấp (div với lớp 'Fancybox-overlay')
  3. nút thoát là được nhấn (e.which = 27)

Vì vậy, bạn có thể thêm trình xử lý nhấp chuột vào cơ thể để kiểm tra xem sự kiện có phải là mục tiêu .fancybox-close hoặc .fancybox-overlay. Ngoài ra, thêm một trình xử lý khóa xuống để ghi lại để nghe nếu phím thoát được nhấn.

+0

tùy chọn khác: 4. khi một cái gì đó gọi $ .fancybox.close(); – David162795

3

Cố gắng sử dụng phương pháp

BeforeClose hoặc afterClose

việc

Mã này tốt

$(".fancybox").fancybox({beforeClose:function(){alert('blah');}} 
0

Đây là một giải pháp phù hợp cho 1.3.4

$(document).delegate('#fancybox-close,#fancybox-overlay','click',function(){ 
    FancyBoxClosed(); 
}); 
$(document).keyup(function(e){ 
    if(e.keyCode == 27){ 
     if($('#fancybox-overlay').css('display') != 'none') 
      FancyBoxClosed(); 
    } 
}); 

function FancyBoxClosed() 
{ 
    //global callback for fancybox closed 
} 

Đối với phiên bản khác không phải là 1.3.4, hãy kiểm tra bộ chọn yếu tố ưa thích cho lớp phủ và nút đóng bằng cách sử dụng con chuồn chuồn, đom đóm hoặc hình khác.

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