Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.10.2013, 22:24
Интересующийся
Отправить личное сообщение для fe1ix Посмотреть профиль Найти все сообщения от fe1ix
 
Регистрация: 02.11.2012
Сообщений: 24

Не работают срикпты в контенте, подгруженным 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, 05.10.2013 в 22:32.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2013, 11:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

fe1ix, а что именно не работает в скрипте? События?
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2013, 14:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от fe1ix
$("#posts").append("some_html" + data);
Вы наверно не понимаете что делает это код. Он очищает innerHTML элемента, что влечет за собой удаление всех элементов, естественно со всеми привязанными обработчиками, далее идет присвоение старого значение innerHTML + новая строка, что влечет за собой пересоздание всех элементов заново, уже конечно без каких либо обработчиков.
Решение:
1) Не использовать innerHTML, добавляя новые элементы через Element.prototype.appendChild , предварительно навешав нужные обработчики.
2) Навешивать обработчики не на посты, а на контейнер, и уже в обработчиках отслеживать целевой элемент события и в зависимости от него уже исполнять тот или иной код. Это называется делегирование событий (его поддержка уже встроена в jQuery)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2013, 23:38
Интересующийся
Отправить личное сообщение для fe1ix Посмотреть профиль Найти все сообщения от fe1ix
 
Регистрация: 02.11.2012
Сообщений: 24

Спасибо за помощь, сильно сложно для меня получилось уловить все вышесказанные моменты.
Пока сделал так:
$("#posts").append("<script>...</script> some_html " + data);

и нужный код заработал.

Понимаю, что не сильно по хен шуй получается, но работает. Будем изучать.

Было бы конечно шикарно увидеть как именно перевызвать код из стороннего файла, а не прописывать код непосредственно в html.
Ответить с цитированием
  #5 (permalink)  
Старый 08.10.2013, 00:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Я кстати насчет append и innerHTML наверно ошибаюсь. Нужно посмотреть исходники jQuery...
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В Ajax контенте не работает скрипт noid Events/DOM/Window 8 26.08.2013 02:22
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Нажатие button в ajax контенте GoodBoy123 AJAX и COMET 9 20.07.2012 14:00
Почему не работают ajax окна? Joshka AJAX и COMET 9 19.05.2011 00:29