Функция Delete работает один раз, затем отключается от остальных элементов [JavaScript Modules] - PullRequest
0 голосов
/ 14 февраля 2020

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

(function() {
  let people = {
    people: ['will', 'john'],
    init() {
      this.cacheDOM();
      this.render();
      this.bindingEvents();
    },
    cacheDOM() {
      this.$inputVal = document.getElementById('input');
      this.$target = document.getElementById('template');
      this.$button = document.getElementById('btn');
      this.$DOMLis = document.getElementsByClassName('elems');
    },
    bindingEvents() {
      this.$button.addEventListener('click', this.addName.bind(this));
      //Adding event listener "delete" to the lis
      this.$keys = Object.keys(this.$DOMLis);
      this.$keys.map(val => {
        this.$DOMLis[val].addEventListener('click', this.remove.bind(this));
      });
    },
    render() {
      this.$target.innerHTML =
        '<ul>' +
        this.people
          .map((val, i) => {
            return `<li key=${i} class='elems' name='${val}'>${val}</li>`;
          })
          .join('') +
        '</ul>';
    },
    addName() {
      this.people.push(this.$inputVal.value);
      this.render();
    },
    remove(e) {
      let index = parseInt(e.target.getAttribute('key'));
        this.people.splice(index, 1);


      this.render();
    },
  };

  people.init();
})();

И это HTML

<div id="root">
  <div id="template"></div>
  <input id="input" type="text" />
  <button id="btn">un</button>
</div>

<script type="text/javascript" src="./script.js"></script>


Кажется, что функция addPerson отлично работает со всем остальным, но функция удаления - нет.

1 Ответ

1 голос
/ 15 февраля 2020

Ваша функция bindingEvents() добавляет прослушиватель событий щелчка для каждого из elems, созданного вашей функцией render(). В следующий раз, когда вызывается render() (после добавления или удаления), все elems удаляются и воссоздаются, но слушатели не добавляются повторно. Вам нужно будет либо изменить способ работы render(), либо повторно добавить прослушиватели событий щелчка для каждого из elems при каждом рендеринге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...