2011-02-03 4 views
1

Я привязываю свои запросы к Facebox только по тому, как документация говорит на веб-сайте Facebox.Facebox работает только один раз

Но после того, как я нажму на один из запросов divbox, запрос 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 cebox, который отделяет событие после его использования один раз.

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

надежда, что он работает

+0

Я не хочу отменить щелчок. Я хочу, чтобы пользователь мог нажимать на него, когда захочет. – Aran

2

у вас судимо, используя жить, как:

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

Боюсь, что это не сработало. Он работал один раз, а затем снова не работал. – Aran

3

Причина, по которой предложение Кима заменить bind() на live() не работает, потому что проблема заключается не в том, что исходный обработчик события клика теряется.

Как следует ошибка:

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

Проблема заключается в том, что объект JQuery $ теряет метод .facebox(). Facebox отлично работает и закрывает окно EXCEPT, когда вы загружаете jQuery INSIDE в facebox. Выполнение этой повторной инициализации jQuery после facebox уже загружено, поэтому у facebox нет возможности повторно добавить себя в объект jQuery $, когда jQuery повторно инициализирует.

Я решил эту проблему, удалив jQuery из кода, который загружается в facebox. Если jQuery уже загружен на главной странице, то он находится в среде, и нет необходимости загружать его снова в код facebox. Это только проблема, если вы полагаетесь на jQuery как на своей главной странице, так и в коде внутри масок. Я полагаю, что если вы снова загрузите jQuery внутри facebox, вы можете использовать отдельный экземпляр с помощью jQuery.noConflict().

+0

Вы также можете загрузить jQuery динамически внутри facebox, если он еще не существует, используя: [этот метод] (http://samespirit.net/ricky/2010/06/21/only-load-jquery-if-not-already- present /) Или [это может быть лучше] (http://css-tricks.com/snippets/jquery/load-jquery-only-if-not-present/) – August

Смежные вопросы