За последние 24 часа нас посетили 22668 программистов и 1546 роботов. Сейчас ищут 925 программистов ...

Не определяются события загруженных ajax-ом элементов

Тема в разделе "JavaScript и AJAX", создана пользователем SamyRed, 5 июн 2017.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте. Делаю загрузку картинок по мере прокрутки страницы вних.
    Так вот, в начале у меня сервер отдаёт 3 блока с катринками, которые работают нормально ($('.feed_img_wrapper').click (function () {...});),
    Далее, при прокрутке страницы вниз, грузится ещё несколько абсолютно аналогичных блоков, но при попытке обработать такое же событие с ними - ничего не происходит. Я подозреваю что это потому, что обработка событий находится в блоке $(document).ready, и по этому работает только с теми, которые были загружены при загрузке страницы. Но как тогда обработать те, которые загружены ajax-ом?

    Если надо - могу приложить файлы, но они большыеи там всё перемешано, так что сложно будет что-либо понять.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Всё правильно подозреваешь. Продумай как навесить на вновь создаваемые объекты.
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну так я, по сути, об этом и спросил)) На что поменять $(document).ready ()?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну где-то должна же быть жилка программерская, ну? Нет единого решения. У тебя есть инструменты. Как ты их будешь использовать - такой результат и будет получаться.
    Когда предо мной стоит подобная задача, я делаю метод навешивания событий и вызываю его 1) при загрузке страницы и 2) после добавления новых элементов. При этом естественно я использую некоторый кэш, который позволяет не обрабатывать элементы, которые уже были обработаны. В самом простом виде это может быть какой-нибудь атрибут или класс.
     
    SamyRed нравится это.
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Вот. Это тоже какое-то событие? Или прописать ф-цию в тело success ajax'a??
    --- Добавлено ---
    А, я, по ходу, понял. Надо на родителя повесить, и проходить по дочерним эллементам?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Сделай уже как-нибудь)
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Сделал через onclick ()
    --- Добавлено ---
    :D как нибудь
     
  8. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Теперь не могу получить эти элементы по ид))
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я бы подсказал, но из-за аватарки не буду :D
     
    Алекс8 нравится это.
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Недавно столкнулся с подобным и нагуглил ответ :)
    Айяйяй, @SamyRed :D
    --- Добавлено ---
    Код (Javascript):
    1. $('#Result').on('click', '.selector', function(){
    2. // бла бла бла
    3. }); // #Result - родительский блок, загруженный изначально. .selector - подгруженный ajax-ом элемент
     
    SamyRed и denis01 нравится это.
  11. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Спасибо)

    А чем тебе моя ава не нравится? :D:D Ава как ава))
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    при создании элемента можно навешивать персонально
     
  13. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Получилось как-то так. Только тапками не закидайте.
    Код (Javascript):
    1. $('#feed').on ('click', '.feed_img_wrapper', (function () {
    2.         window.elem = $( this ).parent ().children ('.feed_photo_footer').children ('i');
    3.         var photoId = $(this).data ('photo-id');
    4.             $.ajax({
    5.                 url: './service/like.php',
    6.                 type: "GET",
    7.                 data: {'photoId': photoId},
    8.                 success: function (data){
    9.                     if (data == 'liked') {
    10.                         window.elem.removeClass ('unliked');
    11.                         window.elem.addClass ('liked');
    12.                     } else if (data == 'unliked') {
    13.                         window.elem.removeClass ('liked');
    14.                         window.elem.addClass ('unliked');
    15.                     } else if (data === false) {
    16.                         alert ('DB error');
    17.                     } else if (data == 'no auth') {
    18.                        
    19.                     } else {
    20.                         alert (data);
    21.                     }
    22.                 }
    23.             });
    24.     }));
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    получилось и хорошо
     
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    [​IMG]
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Не нравится она мне
     
  17. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну это дело личное. Кому нравится, кому нет. Мне, например, нравится.