jquery после вызова ajax перестали работать события с одинаковыми идентификаторами - PullRequest
2 голосов
/ 21 декабря 2011

Не уверен, если это ошибка или я не собираюсь это делать.

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

Для страницы 1 у меня естьобратный вызов для элемента # id1, который работает при начальной загрузке.

После того, как пользователь перейдет на страницу page2, основное содержимое будет заменено содержимым страницы page2, которая также имеет элемент с # id1, они обслуживают то же самоецель.события тоже инициализируются.

Проблема в том, что все на странице 2 будет работать, кроме события, связанного с # id1.

Если вернуться на страницу 1, # id1 также не будет работать.

Посмотрев на консоль, я обнаружил, что при вызове $ ("# id1") иногда дают мнеэлемент начальной загрузки (не уничтожен?), что, вероятно, является причиной.

Загрузка ajax просто использует:

$. Get (path, function (data) {$ ('# main'). Html (data)});

Есть идеи, что здесь происходит?

Если старые элементы не «должным образом уничтожены в jquery», что предполагается здесь делать?

Ответы [ 3 ]

6 голосов
/ 21 декабря 2011

Хотя не совсем ясно, что именно вы связываете, решение состоит в том, чтобы использовать (в зависимости от вашей версии jQuery) live() или on(), чтобы обеспечить привязку к элементам, которых нет в DOM во время выполнения.

jQuery 1.7+: on()

$(document).on('click', '.selector', function() { ... });

jQuery <1.7: <code>live()

$('.selector').live('click', function() { ... });
1 голос
/ 21 декабря 2011

Для этого вы должны сгенерировать динамический идентификатор. Когда вы щелкнете на правой панели, будет сгенерирован идентификатор и поместите идентификатор в тег «id» элемента body. Итак, вы знаете, какой идентификатор создан для какой страницы. Вызовите функцию javascript для события onclick и передайте этот идентификатор этой функции, затем вызовите элемент body как $("#id"+that generated_id).something;. Я думаю, что это поможет.

1 голос
/ 21 декабря 2011

Помните, что идентификатор должен появляться только один раз

Поскольку вы не знаете, какие элементы с ID могут все еще жить в DOM после вызова Ajax, вам следует придерживаться classname вместо.

С этим вы можете использовать jQuery .live() для привязки к элементам, которые были загружены динамически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...