1

我正在绑定我的 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'
4

4 回答 4

3

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() 来使用单独的实例。

于 2012-07-10T14:31:11.840 回答
2

您是否尝试过使用 live 像:

$(document).ready(function() {
    $('.comment').live('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
    }); 
});
于 2011-02-03T11:58:28.620 回答
1
$(document).ready(function() {
    $('.comment').bind('click', function() {
        $.facebox({ajax: '/project/cake_app/comment/tweets/' + $(this).attr('id')});
$(".comment").unbind('click');
    }); 
});

希望它有效

于 2011-02-03T11:55:13.510 回答
1

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

于 2011-02-08T09:21:32.470 回答