За последние 24 часа нас посетили 22795 программистов и 1703 робота. Сейчас ищут 1695 программистов ...

Clone & Remove Jquery

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

  1. Exort

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

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Доброго времени суток.

    Столкнулся с проблемой, в гугле не нашёл ответа...

    Клонирую элемент, когда пытаюсь его удалить - он не удаляется, Jquery его как-бы не видит, но если я удаляю родительский элемент - его он видит.
    [​IMG]
    Есть родительское поле. Минус справа предназначен для удаления данного поля, а кнопка "Добавить пункт шаблона" клонирует первое поле. Получается, я клонирую первое поле и результат удалить не получается, когда на минус нажимаю - ничего не происходит, но если я нажимаю на минус родительского элемента, он его видит и алертит единицу.
    HTML:
    1.   <section class="createTemplate">
    2.     <div class="createTemplate--wrapper">
    3.       <h2>Создание шаблона</h2>
    4.       <form method = "POST" name="addTemplate">
    5.         <div class="form-item">
    6.           <label for="name">Введите название шаблона</label>
    7.           <input id = "name" type="text" placeholder = "Пример: Языки программирования">
    8.         </div>
    9.         <div class="form-item" id = "addTemplate--item">
    10.           <label for="name">Введите значение для шаблона</label>
    11.           <input id = "name" type="text" placeholder = "Пример: PHP">
    12.           <img src="/realise/frontend/images/ux/delete.png" alt="удалить" id = "addTemplate--remove">
    13.         </div>
    14.         <div class="form-item" id = "templateAdd--controll">
    15.           <input type="button" class="btn btn-success" value = "Добавить шаблон" id = "addTemplate--doAdd">
    16.           <input type="button" class="btn btn-primary" value = "Добавить пункт шаблона" id = "addTemplate--addItem">
    17.         </div>
    18.       </form>
    19.     </div>
    20.   </section>
    Код (Javascript):
    1.   /* Добавление пункта шаблона */
    2.   $('#addTemplate--addItem').on('click', function (e) {
    3.     e.preventDefault();
    4.     var item = $(this).parents('form').find('#addTemplate--item').clone();
    5.     console.log(item);
    6.     $('#templateAdd--controll').before(item);
    7.   });
    8.   /* Удаление пункта шаблона */
    9.   $('#addTemplate--remove').on('click', function (e) {
    10.     e.preventDefault();
    11.     alert('1');
    12.     /* $(this).parents('div.form-item').remove(); */
    13.   });
    Благодарю за потраченное время и надеюсь на помощь :)
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (Javascript):
    1. $(document).on('click', '#addTemplate--remove', function (e) {
    2.     e.preventDefault();
    3.     alert('1');
    4.     /* $(this).parents('div.form-item').remove(); */
    5.   });
    --- Добавлено ---
    Как всегда, некоторые очевидные вещи проходят мимо глаз. @Exort, сколько может быть элементов с одинаковым ID? Один.Сколько будет элементов #addTemplate--remove после клонирования?
    Для таких целей используют классы или другой не уникальный идентификатор/селектор.
     
    Exort нравится это.
  3. Exort

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

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Получается, если элемент установлен по ID, то Jquery может ссылаться только по первому / родительскому элементу, а если по классу - ко всем, правильно понимаю? Спасибо за ответ.
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Не совсем, но ход мыслей в правильном направлении. ID элемента - это уникальный идентификатор. Ключевое слово "уникальный" (надеюсь, что смысл расшифровывать не нужно). Класс же может быть присвоен N-ному количеству элементов. Если в коде JS сказано "найди элемент по ID", то найдя такой элемент, поиск прекращается по понятным причинам.
    Что касается первой части моего ответа, то код который я показал, будет не лишним, т.к. в jQuery таким образом устанавливается делегированный обработчик событий. Такой обработчик используется для динамически созданных элементов, т.е. тех, которых изначально при загрузке не было, а появились позже.
     
    Exort нравится это.
  5. Exort

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

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Большое спасибо за помощь!