【问题标题】:Facebox only works onceFacebox 只能使用一次
【发布时间】:2011-02-03 11:08:48
【问题描述】:

我正在绑定我的 Facebox 请求,就像 Facebox 网站上的文档所说的那样。

但在我点击其中一个 div.comment 后,Facebox 请求不再起作用。

我使用的代码就在下面,再往下是我的错误。

$(document).ready(function() {
    $('.comment').bind('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
    }); 
});

错误:

Uncaught TypeError: Object function (a,b){return new d.fn.init(a,b,g)} has no method 'facebox'

【问题讨论】:

    标签: javascript jquery facebox


    【解决方案1】:

    Kim 将 bind() 替换为 live() 的建议不起作用的原因是问题不在于原始的 click 事件处理程序丢失了。

    正如错误提示:

    Uncaught TypeError: Object function (a,b){return new d.fn.init(a,b,g)} has no method 'facebox'
    

    问题是 jQuery $ 对象丢失了 .facebox() 方法。 Facebox 可以很好地关闭和重新打开窗口,除非您在 facebox 中加载 jQuery。这样做会在 facebox 已经加载后重新初始化 jQuery,因此当 jQuery 重新初始化时,facebox 没有机会将自己重新添加到 jQuery $ 对象中。

    我通过从加载到 facebox 的代码中删除 jQuery 解决了这个问题。如果 jQuery 已经加载到主页上,那么它就在环境中,不需要在 facebox 代码中再次加载它。如果您在主页和 facebox 内的代码中都依赖 jQuery,这只是一个问题。我想如果您必须在 facebox 中再次加载 jQuery,您可以使用 jQuery.noConflict() 来使用单独的实例。

    【讨论】:

    【解决方案2】:

    您是否尝试过使用 live like:

    $(document).ready(function() {
        $('.comment').live('click', function() {
            $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
        }); 
    });
    

    【讨论】:

    • 恐怕这不起作用。它工作了一次,然后就再也没有工作了。
    【解决方案3】:
    $(document).ready(function() {
        $('.comment').bind('click', function() {
            $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
    $(".comment").unbind('click');
        }); 
    });
    

    希望它有效

    【讨论】:

    • 我不想取消绑定点击。我希望用户能够随时点击它。
    【解决方案4】:

    我通过从 Facebox 切换到 Fancybox 解决了我的问题,看起来他们是 Facebox 的一个错误,它在使用一次后解除绑定事件。

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多