За последние 24 часа нас посетили 23809 программистов и 1721 робот. Сейчас ищут 1733 программиста ...

Не работает Js в добавленном блоке append

Тема в разделе "JavaScript и AJAX", создана пользователем nicolaa, 28 мар 2018.

  1. nicolaa

    nicolaa Новичок

    С нами с:
    27 мар 2018
    Сообщения:
    7
    Симпатии:
    1
    Есть скрипт
    Код (Text):
    1. <script type="text/javascript">
    2. $(document).ready(function(){
    3.     $("#add").click(function(){
    4.         var newElems = $('<div></div>')
    5.         .append('Новый блок')
    6.         .append('<a class="del" href="#">Удалить</a>');
    7.  
    8.         $('#wrap').append(newElems);
    9.  
    10.         return false
    11.     });
    12.     $(".del").click(function(){
    13.         var pdiv = $(this).parent('div');
    14.         pdiv.fadeOut(100);
    15.         return false
    16.     });
    17. });
    18. </script>
    19.     <div id="wrap">
    20.         <div>Блок 1<a class="del" href=\"#\">Удалить</a></div>
    21.         <div>Блок 2<a class="del" href=\"#\">Удалить</a></div>
    22.     </div>
    23.     <a id="add" href="#">Добавить</a></div>
    Когда добавляем новый блок, в нем не работает кнопка удалить. Как можно исправить эту ошибку?
     
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    click работатет только на элементы которые были в dom при загрузке что бы работать с элементами которые были добавлены динамически используй такую конструкцию
    Код (Javascript):
    1. $('body').on('click', '.del', function(){
    2. })
     
    nicolaa нравится это.
  3. nicolaa

    nicolaa Новичок

    С нами с:
    27 мар 2018
    Сообщения:
    7
    Симпатии:
    1
    Спасибо, работает, есть отличие по нагрузке
    Код (Text):
    1. $('body').on('click', '.del', function(){
    и
    Код (Text):
    1. $(".del").click(function(){
    ?
    Если я буду чаще использовать Ваш вариант, будет ли разница в поведении сайта?
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    :)
    нет
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    Да.
    Так как мы взаимодействуем с глобальным DOM и с его изменяемыми структурами. ( тобишь каждый раз пробегается по документу своим парсером или как там его называют)
    Либо мы работаем со статическим DOM, где добавленный скриптом новый хтмл код не будет виден
    --- Добавлено ---
     
    #5 MouseZver, 28 мар 2018
    Последнее редактирование: 28 мар 2018
  6. glorsh66

    glorsh66 Активный пользователь

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    А можно по идеи еще всплытием реализовать.
    В том плане что обработчик поставить на родительский div
    https://learn.javascript.ru/event-bubbling