Javascript Fancybox:获取单击的锚/元素的id
我正在尝试获取fancybox中单击/显示的元素的id。我试过“this.id”和“this.attr(“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
$("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)
}
});
});