2011-02-03 2 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')}); 
    }); 
}); 

오류 : 나는 Facebox에서 전환하여 내 문제를 해결

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

답변

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

희망 Fancybox, 그들의 버그가 Fa와 같은 것 같습니다. cebox는 이벤트가 한 번 사용 된 후 바인딩을 해제합니다.

+0

클릭을 바인딩 해제하고 싶지 않습니다. 사용자가 언제든지 클릭 할 수 있기를 바랍니다. – Aran

2

당신처럼 살고 사용하여 tryed이 작동

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

이 작업이 두렵다. 그것은 한 번 일한 후 다시는 작동하지 않았습니다. – Aran

3

bind()를 live()로 대체하려는 Kim의 제안이 작동하지 않는 이유는 원래 클릭 이벤트 처리기가 손실되는 것이 아니기 때문입니다.

오류 알 수 있듯이 :

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

문제는 jQuery를 $ 객체가 .facebox() 메소드를 잃는 것입니다. Facebox는 facebox 안쪽에 jQuery를로드 할 때를 제외하고는 창을 닫은 후 다시 열 수 있습니다. jQuery를 다시 초기화 할 때 facebox는 jQuery $ 객체에 자신을 다시 추가 할 기회가 없으므로 facebox가 이미로드 된 후에 jQuery를 다시 초기화합니다.

facebox에로드 된 코드에서 jQuery를 제거하여이 문제를 해결했습니다. jQuery가 메인 페이지에 이미로드되어 있으면 환경에 있고 jQuery를 facebox 코드 안에 다시로드 할 필요가 없다. 이는 메인 페이지와 페이스 박스 안의 코드에서 jQuery를 사용하는 경우에만 문제가됩니다. facebox 안에 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