Повторный вызов .load () без дублирования скриптов - PullRequest
1 голос
/ 09 марта 2012

Я боролся с этим и искал похожие ответы на SO, но, похоже, не могу этого понять.

У меня есть фид активности, который я загружаю из внешнего файла PHP с использованием .load().Внешний файл содержит сценарии для подсчета символов в текстовой области и усечения длинных сообщений, таких как:

$('.watermark_comment').jqEasyCounter({'maxChars': 2000,'maxCharsWarning': 1990,'msgFontSize': '10px','msgFontColor': '#666666','msgFontFamily': 'Arial','msgTextAlign': 'left','msgWarningColor': '#F00','msgAppendMethod': 'insertAfter' });  $('.truncate').jTruncate(); 

Все отлично работает при первой загрузке страницы.Тем не менее, у меня также есть сценарий во внешнем файле для создания бесконечной прокрутки.'Href' содержит строку запроса подкачки:

$(window).scroll(function () { 
     if ($(window).scrollTop() >= $(document).height() - $(window).height() - 500) {
    //Add something at the end of the page
    $('<div></div>').appendTo('#activity_feed_load').load($('.older_posts:last').attr('href'));
    $('.older_posts:first').remove();
    }
    });

Проблема в том, что как только функция прокрутки вызывается и снова вызывается .load, сценарии, примененные ко всем селекторам, ранее находившимся в ленте, удваиваютсявверх».Например, каждый раз, когда вызывается .load (), становится два обратного отсчета, соответствующих jqEasyCounter, и два 'more', соответствующих jTruncate.Каждый раз, когда вызывается .load, количество экземпляров увеличивается на единицу.

Я читал другие посты, в которых обсуждается, как правильно загружать файлы с помощью селектора для удаления скриптов, а затем с помощью getcripts.Но как мне это сделать, когда я неоднократно звоню .load и добавляю результаты?

Буду очень признателен за помощь в этом!

Обновление Хорошо, основано на Кевинепредложения, я удалил скрипт загрузки из внешнего файла и поместил его в основной файл следующим образом:

$(window).scroll(function () { 
     if ($(window).scrollTop() >= $(document).height() - $(window).height() - 500) {
    //Add something at the end of the page
    $('<div></div>').appendTo('#activity_feed_load #no_script').load($('.older_posts').not(".ignore").attr('href')).done(function(){
    $('.older_posts').not(".ignore").addClass("ignore");
    $('.watermark_comment').not(".initialized").jqEasyCounter({
         'maxChars': 2000,
        'maxCharsWarning': 1990,
        'msgFontSize': '10px',
        'msgFontColor': '#666666',
        'msgFontFamily': 'Arial',
        'msgTextAlign': 'left',
        'msgWarningColor': '#F00',
        'msgAppendMethod': 'insertAfter'              
        }).addClass("initialized");

    });
    }
    });

Я пытаюсь удалить ссылку на пейджер после загрузки, а затем использовать последнюю ссылку на пейджерв следующий раз вызывается нагрузка.К сожалению, скрипт запускается один раз, когда я прокручиваю, а затем страница зависает.Не уверен, правильно ли я связываю событие прокрутки.Должен ли я использовать вместо этого .on () или .live ()?

1 Ответ

0 голосов
/ 09 марта 2012

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

.load(theHref + " #someId");

Далее, используйте делегирование событий для привязки событий,

$(document).delegate("event","selector",event);

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

$("#target").load(theHref + " #someId").done(function(){
    $(".someEl", "#target").not(".initialized").myPlugin().addClass("initialized");
})
...