Функция не будет обновлять переменную - PullRequest
0 голосов
/ 14 октября 2019

Переменная status установлена ​​в "uncheck" и должна быть обновлена ​​до "done" с помощью функции change().

В конечном итоге, что должно произойти при нажатии кнопки с идентификатором randomIdTwo, Вызывается функция completeTodo (), в результате чего элемент списка удаляется из его текущего элемента div «list», добавляется к элементу div «complete-list», а функция change () обновляет значение переменной «status» из"снять" с "готово".

Все работает, кроме функции change().

document.getElementById('button').addEventListener('click', function addTodo() {
  var value = document.getElementById('input').value;
  var status = "uncheck";
  var randomId = Math.random();
  var randomIdTwo = Math.random();

  function change() {
    status = "done";
  };

  const item = `<li>
                    <div class="item">
                       <div class="complete">
                        <button id="` + randomIdTwo + `" class="${status}"></button>
                       </div>
    
                       <p class="text">${value}</p>
    
                        <div class="remove">
                           <button id="` + randomId + `" class="todo"></button>
                        </div>
                     </div>
                  </li>`;
  const position = "beforeend";

  list.insertAdjacentHTML(position, item);
  document.getElementById(randomId).addEventListener('click', function removeTodo() {
    var item = this.closest('li');
    item.remove();
  });
  document.getElementById(randomIdTwo).addEventListener('click', function completeTodo() {
    var item = this.closest('li');
    item.remove();
    document.getElementById("completelist").appendChild(item);
    change();
  });
});
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title></title>
  <link rel="stylesheet" type="text/css" href="Resources/CSS/reset.min.css">
  <link rel="stylesheet" type="text/css" href="Resources/CSS/style.css">
</head>

<body>
  <div class="container">
    <header>
      <div id="datetime"></div>
      <div id="ampm"></div>
      <input type="text" id="input" placeholder="Add an item" />
      <button id="button" type="button"><img src="./img/additem4.png"></button>
    </header>
    <div id="list">
    </div>

    <div id="divline"></div>

    <div id="completelist">
    </div>
  </div>
  <script src="resources/JS/app.js"></script>
</body>

</html>

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Изменение переменной status не меняет класс элемента. Вам необходимо обновить кнопки classList

document.getElementById('button').addEventListener('click', function addTodo() {
  var value = document.getElementById('input').value;
  var status = "uncheck";
  var randomId = Math.random();
  var randomIdTwo = Math.random();

  function change(button) {
    button.classList.add("done");
    button.classList.remove("uncheck");
  };

  const item = `<li>
                    <div class="item">
                       <div class="complete">
                        <button id="` + randomIdTwo + `" class="${status}"></button>
                       </div>
    
                       <p class="text">${value}</p>
    
                        <div class="remove">
                           <button id="` + randomId + `" class="todo"></button>
                        </div>
                     </div>
                  </li>`;
  const position = "beforeend";

  list.insertAdjacentHTML(position, item);
  document.getElementById(randomId).addEventListener('click', function removeTodo() {
    var item = this.closest('li');
    item.remove();
  });
  document.getElementById(randomIdTwo).addEventListener('click', function completeTodo() {
    var item = this.closest('li');
    item.remove();
    document.getElementById("completelist").appendChild(item);
    change(this);
  });
});
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title></title>
  <link rel="stylesheet" type="text/css" href="Resources/CSS/reset.min.css">
  <link rel="stylesheet" type="text/css" href="Resources/CSS/style.css">
</head>

<body>
  <div class="container">
    <header>
      <div id="datetime"></div>
      <div id="ampm"></div>
      <input type="text" id="input" placeholder="Add an item" />
      <button id="button" type="button"><img src="./img/additem4.png"></button>
    </header>
    <div id="list">
    </div>

    <div id="divline"></div>

    <div id="completelist">
    </div>
  </div>
  <script src="resources/JS/app.js"></script>
</body>

</html>
0 голосов
/ 14 октября 2019

Вы используете строковую интерполяцию для первоначальной установки класса, но строковая интерполяция не создает привязку данных между результирующим элементом и переменной. Поэтому вызывается change (), и состояние обновляется, но значение элемента, созданного вами через строку, не видит этого изменения, поэтому оно не обновляется.

Вам потребуется доступ кэлемент в DOM и измените его classList вручную.

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