Как я могу заставить jQuery .live () и .expander работать правильно вместе? - PullRequest
0 голосов
/ 08 июля 2011

У меня возникли проблемы с получением .expander для работы с div-файлами, которые содержат динамические данные jQuery (т.е. после загрузки DOM). Пользователь порекомендовал попробовать .live (), и это приблизило меня на шаг, но это создает некоторую странность, как показано на изображениях ниже.

Я имею в виду отдельный вопрос, в котором https://stackoverflow.com/users/830804/eric предложил мне попробовать .live (): Как мне заставить функцию расширителя работать с динамическими данными jQuery?

ПРИМЕЧАНИЕ: слайды 1-4 находятся на моем предыдущем вопросе здесь:

Как заставить функцию расширителя работать с динамическими данными jQuery?

Для слайдов 5-6 см. Ниже.

СЛАЙД 5: Пользовательский интерфейс, который использует .live () для создания расширяемого / сворачиваемого div в каждом модуле

СЛАЙД 6: Результат нескольких нажатий на элемент Div ... Добавляет несколько ссылок свертывания

СЛАЙД 7: Функция, которая использует .live () для нацеливания на динамические данные jQuery

Спасибо за любой совет, который вы могли бы предложить.

Slide 5

Slide 6

Slide 7

1 Ответ

2 голосов
/ 08 июля 2011

Ваш первоначальный ответ неверный. То, что вы хотите сделать, это установить расширенную привязку после загрузки содержимого AJAX, а не по щелчку. Вот псевдокод.

$.get('...' function(d) {
    $('#dynamiclongp').text(d).expander(...);
});

То, что происходит, заключается в том, что .expander вызывается каждый раз, когда вы нажимаете на скрытый тегами div. Я не уверен, когда вы загружаете ваши динамические данные, но вы хотите связать экспандер один раз и только один раз, сразу после установки содержимого.

Если по какой-либо причине функция обратного вызова AJAX недоступна, просто убедитесь, что вы связываете свое событие только один раз.

var bound = false;
$('div.tags-hidden').live('click', function() {
    if(!bound) {
        $(this).find('p').expander(...);
        bound = true;
    }
});
...