Криво работает .on()

Тема в разделе "JavaScript", создана пользователем SocMaster, 21 авг 2014.

Модераторы: ZiX
  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Вообщем, есть посты на странице. В каждом посте есть кнопка ответа(цитирование)
    структура ссылки на ответ
    Код:
    <div class="message-item-info">
    <div class="message-date">06 Марта 2014 в 09:10</div>
    <a href="#message-form" id="204465" class="answer-link">Ответить</a>
    </div>
    Обработчик на js
    Код:
        jQuery('body').on("click",'.answer-link',function () {
        alert(this.id);
        message = jQuery("#post-text-" + this.id).html();
        message = message.replace(/<ignore.[\s\S]+?js_op>/igm, '');
        message = jQuery(message).text();
        jQuery("textarea#fastpostmessage").val("[quote]" + message.replace(/[\s{2,}]+/g, ' ') + "[/quote]");
        });
    Не срабатывает событие для элементов которые загружены на странице. если загрузить новые посты через ajax то у них работает кнопка ответить 0.0
    почему не работает в тех постах которые сразу загружены?? читал докки читал, не получается понять почему

    UP
    Пока нашел решение такое
    Код:
        jQuery('a[href="#message-form"]').on("click",quote);
        jQuery('body').on("click",'.answer-link',quote);
    работает для новых и старых постов
     
    Последнее редактирование: 21 авг 2014
    Шумадан нравится это.
  2. okyrok

    okyrok Создатель

    Регистр.:
    14 июл 2014
    Сообщения:
    23
    Симпатии:
    10
    Это конечно как с бензином, но может не хватает просто: $(document).ready({}) ?
     
    Шумадан нравится это.
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Пробовал и с ним и без
     
    Шумадан нравится это.
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    почему не что-то типа?
    Код:
    $('.answer-link').click(function() {
        ацций код :crazy:
    });
     
  5. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Этот код не работает для динамически подгруженных элементов. Пагинацию написал с использованием ajax
     
    Шумадан нравится это.
  6. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    так после подгрузки динамического контента необходимо вызвать эту функцию, что прицепить хендлера
     
    Джуга нравится это.
  7. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    мм...как это?) я заметил что click не работает, сразу полез в доки где написано что для динамического контента не надо использовать click
     
    Шумадан нравится это.
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    нужно найти процедуру где вставляется контент и после него убрать все клик хендлера и установить их снова. вообще, проще написать маленьку процедурку и вызывать её два раза
    1. при (после) загрузке документа
    2. при вставке нового контента
     
    Джуга нравится это.
  9. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    xd
    Наверное все таки оставлю пока чт
    Код:
      jQuery('a[href="#message-form"]').on("click",quote);
        jQuery('body').on("click",'.answer-link',quote);