【问题标题】:Fancybox, getting Fancybox to bind using LIVE() to items being loaded onto the page after loadFancybox,让 Fancybox 使用 LIVE() 绑定到加载后加载到页面上的项目
【发布时间】:2010-03-28 06:07:29
【问题描述】:

我有一个加载的页面,加载后,它会拉入一个 LI 列表来填充新闻提要。

<li><a href="/url/" class="quickview">quick view</a></li>
<li><a href="/url/" class="quickview">quick view</a></li>
<li><a href="/url/" class="quickview">quick view</a></li>

当用户点击快速查看但没有任何运气时,我试图让花哨的框触发。有什么想法吗?

$(document).ready(function() {
    $('.quickview').fancybox();
});

也试过了:

$(document).ready(function() {
   $('a.quickview').live('click', function() {
        $(this).fancybox();
    });
});

http://fancybox.net/

感谢您的任何想法...

【问题讨论】:

    标签: binding fancybox jquery


    【解决方案1】:

    老问题,但可能对未来的搜索者有用。

    我首选的解决方案是在现场活动中手动触发 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/ 了解更多信息。

    【讨论】:

    • 100% 喜欢此解决方案,感谢您花时间提供它。
    • 您可以这样使用“图库”功能吗? (下一个/上一个链接)
    • 这是迄今为止我最喜欢的解决方案,而且效果很好……干得好
    • +1...老兄,这是一个很好的解决方案...您节省了我很多时间,谢谢!
    • 感谢您的解决方案,它很有帮助...但我认为在大多数情况下,您可以将其简化为更像这样:$('.lightbox').live('click', function() { $.fancybox({ href: $(this).attr('href') }) });。 (除非你在调用灯箱函数时真的需要那些额外的参数。
    【解决方案2】:

    这应该在每个 ajax 请求之后工作

    $(document).ajaxStop(function() { 
        $("#whatever").fancybox();
    });
    

    【讨论】:

    • 这是一个更好的解决方案。 live() 是避免的好东西。
    【解决方案3】:

    问题是将fancybox附加到AJAX加载的元素中,对吧?

    我遇到了同样的问题,我找到了this solution

    我复制粘贴到这里,更多信息请查看原始错误报告:

    $.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

    【讨论】:

    【解决方案4】:

    由于现在推荐 .on 而不是 .live,并且在阅读了 documentation on delegated events 之后,这是我想出的一个解决方案(假设您的元素有一个“触发模式”类):

    $(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;
    });
    

    【讨论】:

    • 甚至只是$(document).on('click', '.trigger-modal', function() { $.fancybox(); return false; });
    【解决方案5】:

    根据我对Fancybox 的理解,对fancybox() 的调用simple 会将插件附加到所选元素。在 click 事件上调用 fancybox 不会打开任何东西。

    我想你只需要添加

    $(li_element_that_you_create).fancybox();
    

    到在您的列表中创建新的LI 元素的代码

    编辑

    如果您使用的是load,那么您会执行以下操作:

    $('#ul_id_goes_here').load('source/of/news.feed', function() {
      $('.quickview').fancybox();
    });
    

    【讨论】:

    • 我没有关注,我正在使用 JQUERY 加载?
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多