Jquery/ Javascript: нежелательная функция дублирования при загрузке страницы

У меня есть веб-приложение, которое основано на пользователях, создающих определенные div с помощью функции щелчка. Когда пользователь добавляет div, я также даю ему возможность удалить указанную функцию. Каждый раз, когда пользователь добавляет div, он помещается в массив. Затем пользователь может сохранить массив и загрузить его, когда они вернутся.

Функция удаления div вложена в функцию добавления, так как это единственный найденный мной способ заставить функцию работать.

Проблема, с которой я столкнулся, заключается в том, что я должен также вызвать функцию удаления в функции загрузки, чтобы кнопка удаления работала до нажатия кнопки добавления. Я попытался просто вызвать функцию вне любой функции, но так как нет никаких div для начала. Поэтому, когда страница загружается и нажимается кнопка удаления, она реализуется дважды и разрушает приложение.

Я новичок в программировании, и то, что я делаю сейчас, в основном процедурное, поэтому любая входная работа приветствуется. Я чувствую, что я делаю ошибку новичка, псевдокод ниже.

$(button).cick(function(){
    store div in array;
    add div to container;
    call remove function;
});
function loadPage() {
    retrieve stored array;
    add stored divs to container;
    call remove function;
}
loadPage();

2 ответа

Решение

Вы можете делегировать действие удаления контейнеру, например так:

$('#container').on('click', '.delete', function() {
    $(this).closest('div.className').remove();
    //here delete stored clone from array.
});

Настройте селекторы, чтобы соответствовать вашему HTML

Таким образом, любая кнопка с class="delete", при нажатии, будет удален (удален) его (внутренний) содержащий div.

  • Действие будет применено ко всем кнопкам удаления в контейнере, независимо от того, находятся ли они на месте во время присоединения этого обработчика щелчков или позже.
  • Это делегированное действие останется на месте при условии, что сам (внешний) контейнер не будет удален (удален).

Я думаю, что это проще, если у вас есть отдельные кнопки для добавления и удаления. Таким образом, вы можете привязать одну кнопку к добавлению div в контейнер, а другую для удаления последнего нажатого div.

Нечто подобное может помочь

  var listOfAddedDivs = [];

  $('.addDivButton').click(addNewDiv);

  $('.removeDivButton').click(removeCurrentDiv);


  function addNewDiv() {
     listOfAddedDivs.push('<div> something </div>');
     updateContainer(listOfAddedDivs);
  }

  function removeCurrentDiv() {
    if(listOfAddedDivs.length >0) {
          listOfAddedDivs.pop();
      }
      updateContainer(listOfAddedDivs);
  }

  function updateContainer(arrayContainingDivs) {

   $('.container').html(arrayContainingDivs.join(' '));
  }
Другие вопросы по тегам