Почему Ceebox запускает дубликаты фреймов и ссылок? - PullRequest
1 голос
/ 28 октября 2011

Я работаю на сайте drupal, который имеет форму отправки вызова ajax функции, которая запускает ceebox. Код функции drupal php выглядит следующим образом:

    $commands = array();
    $html = '<a title="" style="display:none;" href="/subscribe" class="ceebox" id="subscribe" rel="iframe width:500 height:350"></a>';
//attempt to remove already existing ceebox generated elements
    $commands[] = ajax_command_replace('#subscribe','');
    $commands[] = ajax_command_replace('#cee_iframeContent', '');
    $commands[] = ajax_command_replace('#cee_title', '');
    $commands[] = ajax_command_append('body', $html);
    $commands[] = ajax_command_invoke(NULL, 'subscribeOpen', array('subscribe'));
    return array('#type' => 'ajax', '#commands'=>$commands);

Javascript, который вызывает функция drupal:

(function($) {
        $.fn.subscribeOpen = function(data) {

            $('#subscribe').ceebox().trigger('click');


        };



})(jQuery);

Это все работает как положено; т.е. выводит на экран ceebox, содержащий / подписывающийся контент страницы в iframe. Когда я нажимаю ссылку закрытия на ceebox или щелкаю фон, чтобы закрыть, он отключается в первый раз. Когда я затем нажимаю на ссылку подписки, чтобы вызвать вызов drupal ajax и ceebox, он добавляет дополнительную близкую ссылку, дополнительный заголовок «Элемент 1 из 1» и дополнительное окно iFrame. Это повторяется каждый раз, когда я нажимаю кнопку закрытия, а затем запускаю функцию добавления бесконечности. Я попытался добавить unbind ('# ceebox') к элементу #subscribe, а также различные комбинации метода jQuery unique (), но безрезультатно. Может ли кто-нибудь пролить свет на то, как отсоединить / удалить эти дубликаты, пожалуйста?

1 Ответ

2 голосов
/ 28 октября 2011

Я понял это, просмотрев файл jquery.ceebox.js и обнаружил, что в функции intialise запущен метод live ().

Это вызовет множество замечательных проблем, таких как:он должен вызываться только один раз для элемента.Приведенный выше код будет вызывать live () несколько раз при запуске ceebox, поэтому я рекомендую вам заменить строку 374 файла jquery.ceebox.js:

$(elem).live("click", function(e){

следующим образом:

$(elem).bind("click", function(e){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...