2012-09-13 23 views
7

Đó là câu hỏi của tôi và đây là mã ví dụ của tôi.Có phải sự kiện Nhấp chuột câm trong Fancybox không?

HTML:

<a class="fancybox" rel="group" href="img1.jpg"> <img src="img1_thumb.jpg"> </a> 
<a class="fancybox" rel="group" href="img2.jpg"> <img src="img2_thumb.jpg"> </a> 

JS:

var header = '<img id="w" src="logo.gif">'; 

$('.fancybox').fancybox({ 
    afterLoad: function() { 
     this.wrap.prepend(header); 
    }, // afterLoad 
}); //fancybox 

$('#w').click(function() {console.log('clicked');}); 

Nếu bạn nhấp vào một hình ảnh thu nhỏ để khởi động Fancybox, afterLoad sẽ giảm trong tiêu đề, nhưng khi bạn nhấp vào hình ảnh và xem giao diện điều khiển bạn không nhận được gì.

Suy nghĩ? Tôi đang cố gắng sử dụng phương thức $.fancybox.close() của FancyBox, nhưng nếu tôi không thể kích hoạt sự kiện nhấp chuột, tôi buộc phải sử dụng nội tuyến đó, điều tôi không muốn làm vì lợi ích của việc không sử dụng JS inline.

Trả lời

2

Bạn nên sử dụng .on() hoặc tương đương với liên kết động hoặc liên kết trong gọi lại afterLoad. Nó không có gì để làm với Fancybox: bạn đang ràng buộc bằng cách sử dụng một bộ chọn jQuery phù hợp với một cái gì đó mà chưa tồn tại trong DOM. Cách khác, bạn có thể cố gắng liên kết trực tiếp với phần tử trong bộ nhớ, nhưng bạn nên phát triển thoải mái khi làm việc với DOM ràng buộc đầu tiên.

+0

Vì vậy, tôi sẽ đặt một cái gì đó như '$ ('# w'). On ('click', function() {$. Fancybox.close()})' trong 'afterLoad' chức năng sau khi prepending tiêu đề? –

+0

Điều đó đã làm được! Cám ơn rất nhiều. –

+0

Chỉ cần nghĩ rằng tôi muốn thêm rằng ràng buộc các '$ .fancybox.close()' chức năng trong 'afterLoad' gọi lại không phải là tối ưu. Khi bạn cuộn đến hình ảnh tiếp theo, tiêu đề 'mới' không xử lý sự kiện. Tôi đã sửa nó bằng cách di chuyển trình xử lý nhấp chuột vào một cuộc gọi lại 'afterShow'. –