7

私は次のファンシーボックスコードを持っています:

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

//some other callbacks etc

問題は、ページに20の異なるAタグIDがあり、fancybox href属性に、クリックされた要素、つまりイベントをトリガーした要素のIDを取得させたいことです。

私はいくつかのことを試しましたが、どれもうまくいきませんでした!

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

これはとても単純なようですが、「これ」または同様のものをプラグインすると、何も機能しません。

4

5 に答える 5

32

このように、スクリプトにコールバックを追加しない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

:これはfancyboxv2.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
}

id目的の属性を使用します。


編集:最良の方法は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

于 2012-07-23T19:43:51.080 に答える
4

アイテムのコレクションを繰り返し処理して.fancybox、IDを取得できます。

$('.fancybox').each(function(){
    $(this).fancybox({
             'autoScale' : false,
             'href' : $(this).attr('id'),
             'type':'iframe',
             'padding' : 0,
             'closeClick'  : false,
             //some other callbacks etc
    });
});
于 2012-07-23T18:27:03.523 に答える
3

これを試して:

$(".fancybox").click(function(){
    var url = $(this).attr('id');
    $.fancybox({
         'autoScale' : false,
         'href' : url ,
         'type':'iframe',
         'padding' : 0,
         'closeClick'  : false,
         //some other callbacks etc
    });
})
于 2012-07-23T19:00:24.503 に答える
1

これを試して

$('.fancybox').each( function() {
    var elem = jQuery(this);
    elem.fancybox({
             'autoScale' : false,
             'href' : elem.attr('id'),
             'type':'iframe',
             'padding' : 0,
             'closeClick'  : false,
          });
    }
);
于 2012-07-23T18:24:41.030 に答える
1

これを試しましたか?

$('.fancybox').each(function(){
    $(this).fancybox({
         'autoScale' : false,
         'href' : this.id,
         'type':'iframe',
         'padding' : 0,
         'closeClick'  : false,
          //some other callbacks etc
    });
});
于 2012-07-23T18:27:21.677 に答える