Javascript внутри запроса AJAX - PullRequest
2 голосов
/ 18 июля 2011

У меня небольшая проблема с функцией AJAX:

  1. PAGE A означает страницу.
  2. PAGE X обозначает загруженный контент.
  3. RES A обозначает страницу результатов.
  4. RES B обозначает некоторый загруженный AJAX контент => новые результаты.

СТРАНИЦА A содержит 20 результатов, каждый из которых может быть удален, а новый результат загружается через AJAX (PAGE X).

Пример:

Пользователь находится на странице A: -> СТРАНИЦА A загружает функции «щелчка» Результаты> RES A (20x).

Когда пользователь удаляет результат из RES A (1x), AJAX загружает новый результат RES B (1x):

Пользователь находится на странице А. -> СТРАНИЦА X загружена функциями js "click". -> Результат - RES B (1x)

Чтобы добавить функции щелчка в RES B, мне нужно перезагрузить более легкий JS, но он умножает функции RES A.

Таким образом, когда пользователь удаляет результаты из RES A (1x5 для 5 удаленных результатов), результат RES B умножается на 5x (пользователь получает 5x тот же результат вместо 1x).

Ты понял? Вкратце, запрос AJAX умножается на x RES B вместо того, чтобы придерживаться 1 запроса. Есть ли у вас какие-либо подсказки, как я могу сохранить свой RES B 1x?

Спасибо!

Ответы [ 4 ]

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

Я думаю, что вы повторно привязываете событие клика каждый раз, когда «перезагружаете более легкий JS». Javascript не заменяет функцию события - они просто объединяются. Если вы используете jQuery, используйте live , чтобы добавить событие клика. Если нет - очистите текущие события кликов перед перезагрузкой

1 голос
/ 18 июля 2011

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

Лучшим решением в вашем случае будет использование jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */}), который позволяет связать все элементы, соответствующие селектору, один раз (в этом случае, например, если у вас была таблица с id = datatable, каждая ссылка,внутри него всегда будет привязан к этому обработчику, даже если вы добавите больше html в таблицу или удалите его), и вам не придется беспокоиться об этом позже.

Однако, если вы не используете jQuery, единственное решение состоит в том, чтобы либо отменить привязку событий перед их добавлением (чтобы удалить уже существующие привязки), а затем снова связать их.

1 голос
/ 18 июля 2011

Кажется, что события прикрепляются несколько раз.
Используйте unbind().click() или unbind().bind('click'), или die().live(), что бы вы ни использовали

0 голосов
/ 18 июля 2011

Что вам нужно сделать, это обработать результат (1x) при загрузке. Простым способом может быть добавление класса к результатам при загрузке и удаление его после завершения.

, например

$('.newresult .clickbutton').ready(function(){
   // Do something
});

$('.newresult').removeClass('newresult');
...