2012-07-23 35 views
6

Tôi có đoạn code Fancybox sau:Làm cách nào để tạo fancybox href động?

$('.fancybox').fancybox({ 
      'autoScale' : false, 
      'href' : $('.fancybox').attr('id'), 
      'type':'iframe', 
      'padding' : 0, 
      'closeClick' : false, 

//some other callbacks etc 

vấn đề là tôi có hai mươi khác nhau Thẻ id của trên trang và tôi muốn Fancybox thuộc tính href để lấy id của phần tử nhấp, tức là một trong đó kích hoạt sự kiện.

Tôi đã thử một vài điều, không ai trong số họ đã làm việc!

'href' : $(this).attr('id'), 
'href' : $(this.element).attr('id'), 

Điều này có vẻ rất đơn giản nhưng bất cứ lúc nào tôi cắm 'này' hoặc tương tự không có tác phẩm nào.

+0

sự khác nhau giữa việc sử dụng thuộc tính 'id' và thuộc tính' href' là gì? ... hãy để html làm những gì tốt hơn (không sử dụng jQuery), bạn có thể có 20 ID khác nhau trong các thẻ '' nhưng tất cả chúng có thể chia sẻ cùng một 'class =" fancybox "' để kịch bản của bạn ở trên sẽ hoạt động liền mạch và mà không qua những thứ phức tạp. – JFK

+0

theo dõi nhận xét trước của tôi, bạn chỉ cần xóa tùy chọn API 'href' và hộp ưa thích sẽ lấy nó từ thuộc tính' href' trong thẻ ''. – JFK

+0

của tôi mặc dù là không chuẩn, khách hàng không muốn hai mươi liên kết khác nhau trên trang vì vậy tôi đang sử dụng href với "#" trong họ và tại một số điểm trong mã tôi cần JS để gửi nó vào href thực mà tôi đã lưu trữ trong id. Mở để đề xuất! – absentx

Trả lời

29

Without each() hoặc click() chỉ cần thêm beforeLoad callback để kịch bản của bạn như thế này

$(".fancybox").fancybox({ 
    autoScale: false, 
    // href : $('.fancybox').attr('id'), // don't need this 
    type: 'iframe', 
    padding: 0, 
    closeClick: false, 
    // other options 
    beforeLoad: function() { 
     var url = $(this.element).attr("id"); 
     this.href = url 
    } 
}); // fancybox 

LƯU Ý: này là dành cho Fancybox v2.0.6 +

Mặt khác, một hơn giải pháp thanh lịch là sử dụng (HTML5) data-* thuộc tính để thiết lập href (nó sẽ trông lạ để thiết id="images/01.jpg" khác), do đó bạn có thể làm:

<a href="#" id="id01" data-href="images/01.jpg" ... 

và gọi lại của bạn

beforeLoad: function(){ 
var url= $(this.element).data("href"); 
this.href = url 
} 

và sử dụng thuộc tính id cho ý nghĩa của nó.


EDIT: Điều tốt nhất là sử dụng data-fancybox-href thuộc tính đặc biệt trong neo của bạn như:

<a id="item01" data-fancybox-href="http://jsfiddle.net" class="fancybox" rel="gallery" href="javascript:;">jsfiddle</a> 

và sử dụng một kịch bản đơn giản mà không gọi lại như

$(".fancybox").fancybox({ 
    // API options 
    autoScale: false, 
    type: 'iframe', 
    padding: 0, 
    closeClick: false 
}); 

Xem JSFIDDLE

+0

ahh hoàn hảo ... Tôi đã thử một vài điều trong gọi lại beforeload nhưng tôi phải có được một chút đi. Cảm ơn một lần nữa điều này làm việc hoàn hảo, bạn đã giúp tôi có được thông qua rất nhiều thứ fancybox này! – absentx

+0

Cảm ơn vì điều này. Tôi cần phải gắn thêm một lá cờ ajax vào url của tôi để tôi có thể phục vụ lên một mẫu phương thức không có kiểu chữ, trong khi vẫn giữ nguyên url cho trình thu thập thông tin, trình đọc màn hình và _open trong các lần nhấp window_ mới. – murraybiscuit

1

Hãy thử điều này

$('.fancybox').each(function() { 
    var elem = jQuery(this); 
    elem.fancybox({ 
      'autoScale' : false, 
      'href' : elem.attr('id'), 
      'type':'iframe', 
      'padding' : 0, 
      'closeClick' : false, 
      }); 
    } 
); 
4

Bạn có thể duyệt qua bộ sưu tập các .fancybox các mặt hàng và lấy id.

$('.fancybox').each(function(){ 
    $(this).fancybox({ 
      'autoScale' : false, 
      'href' : $(this).attr('id'), 
      'type':'iframe', 
      'padding' : 0, 
      'closeClick' : false, 
      //some other callbacks etc 
    }); 
}); 
1

Bạn đã thử cái này chưa?

$('.fancybox').each(function(){ 
    $(this).fancybox({ 
     'autoScale' : false, 
     'href' : this.id, 
     'type':'iframe', 
     'padding' : 0, 
     'closeClick' : false, 
      //some other callbacks etc 
    }); 
}); 
3

Hãy thử điều này:

$(".fancybox").click(function(){ 
    var url = $(this).attr('id'); 
    $.fancybox({ 
     'autoScale' : false, 
     'href' : url , 
     'type':'iframe', 
     'padding' : 0, 
     'closeClick' : false, 
     //some other callbacks etc 
    }); 
}) 
Các vấn đề liên quan