我想在fancybox中获取clicked / shown元素的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")
});
有什么建议吗?
答案 0 :(得分:11)
你可以这样做:
$("a.lightbox_image").each(function() {
$(this).fancybox({
'transitionIn': 'elastic',
'transitionOut': 'elastic',
'speedIn': 600,
'speedOut': 200,
'content': 'Id of element clicked' + this.id
});
});
this
可能指的是您当前绑定的window
(或document
如果在ready
事件中,如果没有看到更多代码则无法确定。要使this
成为您想要的<a>
,您应该使用.each()
循环并在那里分配...在.each()
闭包内,this
是指到锚点。
答案 1 :(得分:9)
我在使用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窗口之后,这用于重新加载数据行。
答案 2 :(得分:3)
这似乎对我有用:)
<div class="thumbnail">
<a class="fancybox" title="MyTitle" rel="group" href="#" id="fiid_4">
<img src="/dir/image4.png" alt="x" style="width:200px;height:160px;" />
</a>
<a class="fancybox" title="MyTitle" rel="group" href="#" id="fiid_5">
<img src="/dir/image5.png" alt="x" style="width:200px;height:160px;" />
</a>
<a class="fancybox" title="MyTitle" rel="group" href="#" id="fiid_6">
<img src="/dir/image6.png" alt="x" style="width:200px;height:160px;" />
</a>
</div>
javascript:
$(document).ready(function() {
$(".fancybox").attr('rel', 'gallery').fancybox({
loop : false,
afterLoad: function(current, previous) {
console.log(this.element[0].id)
console.info( 'Current: ' + current.href );
console.info( 'Previous: ' + (previous ? previous.href : '-') );
if (previous) {
console.info( 'Navigating: ' + (current.index > previous.index ? 'right' : 'left') );
//When navigating, we want to add the next set of images! :)
new_images = getNextFancyImages(current.index > previous.index ? 'right' : 'left')
}
}
});
});
在firebug中,您可以看到日志:)
答案 3 :(得分:2)
建议使用每个循环的答案是正确的,但如果您使用任何回调(beforeShow,beforeLoad,onUpdate等),那么需要了解一个重要细节。
在每个循环的上下文中,此指的是将被点击的元素。 但是只要你进入fancybox回调,这个就会引用fancybox对象。 诀窍是将 this 元素存储到另一个变量中,例如 。 然后在回调中参考那个。
$('.fancybox').each(function() {
var that = this;
$(this).fancybox({
beforeLoad: function() {
var id = $(that).attr('id');
console.log("id of element clicked is: "+id)
}
});
});
答案 4 :(得分:0)
each(function()
解决方案会破坏图库(换句话说,不再有“下一个”和“上一个”按钮)。
似乎可以工作并保存库的解决方案是在调用fancyBox之前为元素上的click事件分配一个函数,并将id保存到唯一的div。
例如:
$(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' } }
});
});