Fancybox,让Fancybox使用LIVE()绑定到加载后加载到页面上的项目
我有一个加载的页面,加载后,它会输入一个LI列表来填充新闻源。
quick view quick view quick view
当用户点击快速查看但没有运气时,我正试图让奇特的盒子触发。 有任何想法吗?
$(document).ready(function() { $('.quickview').fancybox(); });
还尝试过:
$(document).ready(function() { $('a.quickview').live('click', function() { $(this).fancybox(); }); });
http://fancybox.net/
谢谢你的任何想法……
问题是将fancybox附加到AJAX加载元素中,对吧?
我有同样的问题,我找到了这个解决方案 。
我将其复制粘贴到此处,请参阅原始错误报告以获取更多信息:
$.fn.fancybox = function(options) { $(this) .die('click.fb') .live('click.fb', function(e) { $(this).data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) e.preventDefault(); [...]
归功于jeff.gran 。
旧问题,但可能对未来的搜索者有用。
我首选的解决方案是从直播活动中手动启动fancybox,例如:
$('.lightbox').live('click', function() { $this = $(this); $.fancybox({ height: '100%', href: $this.attr('href'), type: 'iframe', width: '100%' }); return false; });
编辑:从jQuery 1.7不推荐使用live(),而应该使用on()。 有关详细信息,请参阅http://api.jquery.com/live/ 。
这应该在每个ajax请求之后工作
$(document).ajaxStop(function() { $("#whatever").fancybox(); });
因为.on
现在推荐使用.live
,在阅读了委托事件的文档之后,这里提出了一个解决方案(假设你的元素有一个’trigger-modal’类):
$(document).on('click', '.trigger-modal', function() { // remove the class to ensure this will only run once $(this).removeClass('trigger-modal'); // now attach fancybox and click to open it $(this).fancybox().click(); // prevent default action return false; });
根据我对Fancybox的理解,对fancybox()
的调用简单地将插件附加到所选元素。 在click
事件上调用fancybox
不会打开任何内容。
我想你只需要添加
$(li_element_that_you_create).fancybox();
到列表中创建新LI
元素的代码
编辑
如果您正在使用load
,那么您将执行以下操作:
$('#ul_id_goes_here').load('source/of/news.feed', function() { $('.quickview').fancybox(); });