2011-02-03 238 views
1

我綁定我的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' 

回答

1

我切換從Facebox來解決我的問題Fancybox,它似乎是Fa的一個bug cebox在使用一次後解除綁定事件。

1
$(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

2

有你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

3

金的建議用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