Facebox只能工作一次

问题描述:

我绑定我的Facebox请求文档在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' 

我切换从Facebox来解决我的问题Fancybox,它似乎是Fa的一个bug cebox在使用一次后解除绑定事件。

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

希望它的工作原理

+0

我不想取消绑定点击。我希望用户能够随时点击它。 – Aran 2011-02-03 17:49:28

有你tryed使用活得像:

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

害怕这没有奏效。它曾经工作过一次,之后又不再工作。 – Aran 2011-02-03 17:51:18

金的建议用live()替换bind()没有奏效的原因是因为问题不在于原始的单击事件处理程序丢失。

随着误差表明:

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

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

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

+0

你也可以在facebox中动态加载jQuery,如果它不存在使用:[this method](http://samespirit.net/ricky/2010/06/21/only-load-jquery-if-not-already-目前/)或[这一个可能会更好](http://css-tricks.com/snippets/jquery/load-jquery-only-if-not-present/) – August 2012-07-10 14:42:28