Не работают срикпты в контенте, подгруженным Ajax-ом
Перенесите, плз, в нужную ветку.
Всем привет. Перепробовал все, что смог найти в Интернете, ничего не помогло.
$.ajax({
url: 'some_url',
method: 'POST',
data: {"some" : data},
}).done(function(data){
data = jQuery.parseJSON(data);
if (data.length > 0) {
$.each(data, function(index, data){
$("#posts").append("some_html" + data);
});
}});
После того, как добавляю новые записи аяксом, на контенте в DIV с id=posts перестают работать уже загруженные ранее яваскрипты. Проблема знаю в чем, но как мне заново "запустить", допустим, скрипт http://site.ru/js/script.js для новосозданных постов? <div id="posts"> <div id="post_1">some_data</div> <div id="post_2">some_data</div> ... <!--Новые посты, подгруженные Ajax-ом, на которые не срабатывают яваскрипты, загруженные выше по странице--> <div id="post_7">some_data</div> .... </div> |
fe1ix, а что именно не работает в скрипте? События?
|
Цитата:
Решение: 1) Не использовать innerHTML, добавляя новые элементы через Element.prototype.appendChild , предварительно навешав нужные обработчики. 2) Навешивать обработчики не на посты, а на контейнер, и уже в обработчиках отслеживать целевой элемент события и в зависимости от него уже исполнять тот или иной код. Это называется делегирование событий (его поддержка уже встроена в jQuery) |
Спасибо за помощь, сильно сложно для меня получилось уловить все вышесказанные моменты.
Пока сделал так:
$("#posts").append("<script>...</script> some_html " + data);
и нужный код заработал. Понимаю, что не сильно по хен шуй получается, но работает. Будем изучать. Было бы конечно шикарно увидеть как именно перевызвать код из стороннего файла, а не прописывать код непосредственно в html. |
Я кстати насчет append и innerHTML наверно ошибаюсь. Нужно посмотреть исходники jQuery...
|
| Часовой пояс GMT +3, время: 17:59. |