Javascript Fancybox:获取单击的锚/元素的id

Javascript Fancybox:获取单击的锚/元素的id,javascript,jquery,fancybox,Javascript,Jquery,Fancybox,我正在尝试获取fancybox中单击/显示的元素的id。我试过“this.id”和“this.attr(“id”)”——但都不起作用 $("a.lightbox_image").fancybox({ 'transitionIn': 'elastic', 'transitionOut': 'elastic', 'speedIn': 600, 'speedOut': 200, 'c

我正在尝试获取fancybox中单击/显示的元素的id。我试过“this.id”和“this.attr(“id”)”——但都不起作用

$("a.lightbox_image").fancybox({
            'transitionIn': 'elastic',
            'transitionOut': 'elastic',
            'speedIn': 600,
            'speedOut': 200,
            'content': 'Id of element clicked'+this.attr("id")
 });

有什么建议吗?

您可以这样做:

$("a.lightbox_image").each(function() {
  $(this).fancybox({
        'transitionIn': 'elastic',
        'transitionOut': 'elastic',
        'speedIn': 600,
        'speedOut': 200,
        'content': 'Id of element clicked' + this.id
  });
});

可能指当前绑定的
窗口
(或
文档
如果在
就绪
事件中,无法确定是否会看到更多代码)。对于
this
作为
循环并将其分配到那里…在闭包内部,
this
指的是锚。

我在使用Nick Craver的解决方案和“onClosed”函数时遇到问题,经过一些测试,我找到了有效的解决方案:

$("a.lightbox_image").each(function() {
  var tthis = this;
  $(this).fancybox({
        'transitionIn': 'elastic',
        'transitionOut': 'elastic',
        'speedIn': 600,
        'speedOut': 200,
        onClosed : function() {
           alert(this.id);
     }
  });
});

在我的例子中,这是用来在关闭编辑数据的fancybox窗口后用数据重新加载行的

在firebug中,您可以看到日志:)

每个
(function()
解决方案都会破坏库(换句话说,不再有“下一步”和“上一步”按钮)

在调用fancyBox之前,为元素上的click事件分配一个函数,并将id保存到一个唯一的div,这似乎是一个有效的解决方案,可以保存gallery

例如:

$(document).ready(function() {
    $(".fancybox").click(function() { $("#<unique_div>").data("clickedid", this.id); }).fancybox({
        beforeShow: function () {
            this.title += '<br />';
            this.title += 'Clicked id: ' + $("#<unique_div>").data("clickedid");
        },
        prevEffect: 'none',
        nextEffect: 'none',
        loop: false,
        fitToView: false,
        helpers: { title: { type: 'inside' }  }
    });
});
$(文档).ready(函数(){
$(“.fancybox”)。单击(函数(){$(“#”)。数据(“clickedid”,this.id);})。fancybox({
beforeShow:函数(){
this.title+='
'; this.title+='Clicked id:'+$(“#”).data(“clickedd”); }, 效果:“无”, 下一个效果:“无”, 循环:false, 菲托维:错, 帮助程序:{title:{type:'inside'}} }); });
建议使用each循环的答案是正确的,但是如果使用任何回调(beforeShow、beforeLoad、onUpdate等),有一个重要的细节需要理解

在每个循环的上下文中,这是指将被单击的元素。 但是,一旦进入fancybox回调,这个引用fancybox对象。 技巧是将元素this存储到另一个变量中,例如that。 然后在回拨中参考

$('.fancybox').each(function() {
   var that = this;
   $(this).fancybox({
      beforeLoad: function() {
          var id = $(that).attr('id');
          console.log("id of element clicked is: "+id)
       }
    });
});

恐怕没有-已经尝试过了,它只是返回“undefined”抱歉-我没有注意到除了“+this.id”之外的其他更改-刚刚尝试过,现在它就像一个符咒。Thx:)@kastru:Great:)一定要接受答案才能解决你的问题!帮助每个人,包括您在将来更快地获得答案:)我从提交到接受答案都要等待10分钟:)这会破坏我的图库效果,rel=“”,为什么?这是您何时使用事件的解决方案。感谢您最好使用
按钮
单击按钮
而不是
t此
在afterLoad中使用$(this.element[0])将给出元素,您可以使用类似$(this.element[0]).attr('id')的元素
$(document).ready(function() {
    $(".fancybox").click(function() { $("#<unique_div>").data("clickedid", this.id); }).fancybox({
        beforeShow: function () {
            this.title += '<br />';
            this.title += 'Clicked id: ' + $("#<unique_div>").data("clickedid");
        },
        prevEffect: 'none',
        nextEffect: 'none',
        loop: false,
        fitToView: false,
        helpers: { title: { type: 'inside' }  }
    });
});
$('.fancybox').each(function() {
   var that = this;
   $(this).fancybox({
      beforeLoad: function() {
          var id = $(that).attr('id');
          console.log("id of element clicked is: "+id)
       }
    });
});