Jquery “访问”;这";内部Fancybox选项

Jquery “访问”;这";内部Fancybox选项,jquery,fancybox,fancybox-2,Jquery,Fancybox,Fancybox 2,我有一个打开Fancybox的链接,如下所示: <a class="fancybox" rel="gallery" href="<?php echo $image_src; ?>" data-id="<?php echo $post->ID; ?>"> 但是,它不起作用。获取数据属性总是在helper函数中返回未定义的。如何使其工作。$(this.element)。数据('id')将在绑定回调时进行计算此将是您在调用$时所处的任何上下文。fancybo

我有一个打开Fancybox的链接,如下所示:

<a class="fancybox" rel="gallery" href="<?php echo $image_src; ?>" data-id="<?php echo $post->ID; ?>">
但是,它不起作用。获取数据属性总是在helper函数中返回
未定义的
。如何使其工作。

$(this.element)。数据('id')
将在绑定回调时进行计算
将是您在调用
$时所处的任何上下文。fancybox

如果要将Fancybox绑定到锚定标记,则已选择该锚定标记。像这样的方法应该会奏效:

$('a.fancybox').each(funcion () {
  var $a = $(this);
  $a.fancybox({ tpl: "..." + $a.data('id') + "..." });
});

使用php这样的工具不是更容易吗

buttons : { 
 position: 'bottom',
 tpl: '...<a class="test-btn" data-id="<?php echo $post->ID; ?>" href="#"></a>...'
}
按钮:{
位置:'底部',
第三方物流:“……”
}

问题是您不能在回调函数之外使用
$(this.element)
。。。您正在尝试在模板中使用它。

@meagar提供了一个通常适用于大多数人的伟大解决方案。然而,由于用于调用Fancybox的链接是通过Ajax请求加载到页面上的,所以他的解决方案对我来说不起作用。我通过声明一个全局变量,然后将
$(this.element).data('id')
的值传递给Fancybox
afterLoad
回调中的全局变量来解决这个问题

afterLoad : function() {
    my_global_var = $(this.element).data('id');
}

然后我简单地使用了helper选项中的全局变量。

Thx作为回复。应用上述解决方案会在新窗口中打开图像,而不是在fancybox中打开。有什么建议吗?你可能在某处有JavaScript错误。安装Firebug并调试它。我正在用Firebug调试,没有JS错误。当我在
每个
函数中包装fancybox函数时,图像会在另一个窗口中打开,而不是fancybox。这似乎是Ajax加载内容的问题。
a.fancybox
链接是ajax加载的。关于如何将
每个
.on
合并以实现此目的,您有什么想法吗?-实际上,这可以在PHP中实现。然而,这需要我将javascript内联到PHP中(我不打算这样做)。Fancybox回调位于单独的JS文件中。我使用全局变量解决了这个问题。请参阅我的答案。谢谢你的意见。小心你的解决方案。缺点是第一个元素的
my\u global\u var
仍将
未定义。然后它会将第一个元素的
$(this.element).data('id')
的值应用于第二个元素,依此类推。@JFK这是我最初的想法。但是,这也适用于第一个元素,没有任何问题@肯尼迪,我明白。但我的理由是(也许,我可能错了)。Helper函数在afterLoad回调之后但在afterShow回调之前运行。因此,当Helper函数运行时,afterLoad回调已经将该值传递给了全局变量。不过,如果我对afterShow回调也这么做,它的行为将与您描述的完全一样。
afterLoad : function() {
    my_global_var = $(this.element).data('id');
}