Colorbox загружает один и тот же документ несколько раз в Firefox - PullRequest
2 голосов
/ 05 апреля 2011

Здравствуйте. У меня есть страница, на которой отображается большое количество токенов, поступающих по запросу AJAX. Это метод, который отображает содержимое:

function renderTextView(documentId, manuscriptId) {
$("#textView").empty();
$(".token-display a").die();

$.each(window.g_cacheAllTokens, function(idx, token) {
    var html = renderToken(token, documentId, manuscriptId);
    $("#textView").append( html );
});

$(".token-display a").live('click', function() {
      var url = $(this).attr('href');
        $.fn.colorbox({ 
            opacity:  0.25,
            href:     url,
            open:     true,
            onClosed: function() { 
                reloadViews(documentId, manuscriptId);
            }
        }); // colorbox
        return false;
});

// enable tooltips for tokens
if( true == getEditorOption('showTooltips') ) {
    $(".token-display").tooltip();
}
} // renderTextView

Для каждого рендеринга токена я установил живой обработчик, который открывает цветное окно при нажатии. В Chrome он вроде бы ведет себя нормально, но в Firefox. Как только я открываю colorbox, а затем закрываю его, во второй раз, когда я открываю его (тот же или любой другой токен на экране), он дважды запрашивает целевой URL, если я делаю это три раза, то он выполняет запрос три раза. и т. д.

Как вы можете видеть, когда colorbox закрывается, я перезагружаю представление, поэтому я получаю новые токены и обновляю обработчики.

Это делает мое приложение непригодным к использованию после небольшого времени использования, так что это довольно плохая проблема.

Я понятия не имею, что это может быть, и я даже не знаю, как его отладить.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Я также заметил, что это происходит, если страница, отображаемая внутри Colorbox, также включает JavaScript для Colorbox. По крайней мере, это была моя проблема. Любая страница, которую вы загружаете в Colorbox, не должна содержать дубликат JavaScript.

Надеюсь, это может помочь кому-то, у кого были такие же проблемы, как и у меня.

0 голосов
/ 06 апреля 2011

В случае, если кто-то сталкивается с подобной проблемой, мне удалось решить ее, изменив обработчик кликов с динамического на статический, например:

$(".token-display a").click(function() {
// ...handler code...
});

вместо того, что у меня было раньше:

$(".token-display a").live('click', function() {
// ...handler code...
});

Похоже, что Firefox по какой-то причине дважды добавляет обработчик.

...