Приложение Todo: как динамически добавлять флажок и ввод текста при нажатии клавиши Enter в HTML с помощью JavaScript?

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

Новый элемент задачи должен иметь флажок и способ добавления текста/заголовка к элементу задачи. Я пробовал использовать textaera и добавлять флажки, но их взаимодействие происходило неправильно (новый флажок, автоматически появляющийся при нажатии кнопки ввода, не происходил).

Я понял, как добавить «галочку» в флажок при нажатии.

Эти флажки не должны быть постоянными, и вместо этого, когда пользователь нажимает кнопку возврата, они должны исчезнуть и оставить пустую строку.

<textarea id = "Todolist" style = "height: 400px; width: 1200px"
placeholder = "Enter your todolist here"></textarea>
<button name = "Save" onclick = "save()">Save</button>

Пожалуйста, продемонстрируйте, что вы пробовали, обновив свой вопрос своим кодом.

mykaf 05.06.2024 19:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Если вы удалите все стили из ввода, это будет выглядеть как свободный ввод текста с помощью клавиш Enter и Backspace, добавляющих и удаляющих «линии».

document.forms.form01.addEventListener('keydown', e => {
  switch(e.key) {
    case 'Enter':
      e.preventDefault();
      if (e.target.name == 'title'){
        add_item(e.target.form);
      }
      break;
    case 'Backspace':
      if (e.target.name == 'title' && e.target.value == ''){
        e.preventDefault();
        remove_item(e.target);
      }
      break;
  }
});

function add_item(form){
  // create the new todo item
  let fs = document.createElement('fieldset');
  let cb = document.createElement('input');
  cb.name = 'item';
  cb.type = 'checkbox';
  fs.append(cb);
  let tb = document.createElement('input');
  tb.name = 'title';
  tb.type = 'text';
  fs.append(tb);
  // add the todo item to the items fieldset
  form.items.append(fs);
  // set focus to the new text input
  tb.focus();
}

function remove_item(input) {
  let fs = input.closest('fieldset');
  // find the previous element
  let prev_fs = fs.previousElementSibling;
  // if there is a rev_fs set focus to the input
  // in the previous text input.
  // and delete the todo item/fieldset
  if (prev_fs){
    prev_fs.elements.title.focus();
    fs.remove();
  }
}
fieldset {
  border: none;
  margin: 0;
  padding: 0;
}

input[type = "text"] {
  border: none;
}

input[type = "text"]:focus {
  outline: none;
}
<form name = "form01">
  <fieldset name = "items">
    <fieldset>
      <input type = "checkbox" name = "item"><input type = "text" name = "title">
    </fieldset>
  </fieldset>
  <button type = "submit">Save</button>
</form>

Другие вопросы по теме