Как сделать fancybox href динамическим?

у меня есть следующий код fancybox:

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

//some other callbacks etc

проблема в том, что у меня есть двадцать разных идентификаторов тегов на странице, и я хочу, чтобы атрибут fancybox href принимал идентификатор щелкнутого элемента, то есть тот, который вызвал событие.

Я пробовал несколько вещей, ни одна из них не работала!

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

Это кажется таким простым, но в любое время я подключаю " это " или подобное ничего не работает.

5 ответов


без each() или click() просто добавить beforeLoad обратный вызов вашего скрипта, как это

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

Примечание: это для fancybox v2.0.6+

С другой стороны, более элегантных решение использовать (HTML5)data-* атрибут для установки href (было бы странно установить id="images/01.jpg" в противном случае), так что вы могли бы сделать:

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

и ваш обратный вызов

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

и с помощью для для чего он предназначен.


редактировать : лучше всего использовать специальный data-fancybox-href атрибут в вашем якоре, как:

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

и использовать простой скрипт без обратного вызова как

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

посмотреть JSFIDDLE


вы можете перебирать свою коллекцию .fancybox элементы и захватить идентификатор.

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

попробуйте это:

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

попробуй такое

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

вы пробовали это?

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