Показать сообщение отдельно
  #3 (permalink)  
Старый 18.10.2018, 22:29
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

https://www.w3schools.com/howto/howto_js_todolist.asp

) или авторский варик сделанный "на коленке":
<ol id="todoView"></ol>
<div>
  Название: <input type="text" id="todo" value="" />
  <input type="button" id="add" value="Добавить" />
</div>
<script>
  var todos = []
  var todo = document.getElementById('todo')
  var todoView = document.getElementById('todoView')

  document.getElementById('add').addEventListener('click', function () {
    if (todos.filter(t => t.title === todo.value).length > 0) {
      alert('Такой todo уже есть')
    } else if (todo.value.length === 0) {
      alert('Название не может быть пустым')
    } else {
      var id = todos.length + 1
      todos.push({
        id,
        title: todo.value,
        complete: false
      })

      var li = document.createElement('li')
      var span = document.createElement('span')
      span.innerText = todo.value
      span.dataset.todo = id

      var checkbox = document.createElement('input')
      checkbox.type = 'checkbox'
      checkbox.todo = id

      checkbox.addEventListener('change', function (e) {
        var todo = todos.forEach(t => {
          if (t.id === e.target.todo) {
            var span = document.querySelector(`span[data-todo='${e.target.todo}']`)
            t.complete = !t.complete
            span && t.complete ? span.style.textDecoration = 'line-through' : span.style.textDecoration = 'none'
          }
        })
      })

      li.appendChild(checkbox)
      li.appendChild(span)

      todoView.appendChild(li)
      todo.value = ''
    }
  })
</script>
Ответить с цитированием