Категория в JavaScript с использованием ввода

Как я могу разделить «задачи» из ввода на категории? С отфильтрованной галереей все в порядке, я нашел много туториалов на W3school, но я нигде не нашел, как я могу добавить их из прямого ввода, вероятно, используя option-id.

filterSelection("all")

function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = "";
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}

function addClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {
      element.className += " " + arr2[i];
    }
  }
}

function removeClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);
    }
  }
  element.className = arr1.join(" ");
}

// Add active class to the current button (highlight it)
var btnContainer = document.getElementById("myBtnContainer");
var btns = btnContainer.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
  btns[i].addEventListener("click", function() {
    var current = document.getElementsByClassName("active");
    current[0].className = current[0].className.replace(" active", "");
    this.className += " active";
  });
}
<form id = "FORM">
  <label for = "jmeno">Assigned task</label>
  <input type = "text" id = "homework" required />

  <label for = "category">Category</label>

  <select name = "selectCategory" id = "category">
    <option value = "">---</option>
    <option value = "School" id = "school">School</option>
    <option value = "Work" id = "work">Work</option>
  </select>

  <input type = "submit" value = "Add" />
</form>

<h2>TASK TO</h2>

<div id = "myBtnContainer">
  <button class = "btn active" onclick = "filterSelection('all')"> All</button>
  <button class = "btn" onclick = "filterSelection('school')"> To school</button>
  <button class = "btn" onclick = "filterSelection('work')"> To work</button>
</div>

Можете ли вы добавить свой текущий код JS к вопросу?

user5734311 19.12.2020 12:34

Вы говорите о поле ввода домашнего задания? Не могли бы вы объяснить, что вы пытаетесь сделать?

HymnZzy 19.12.2020 12:46

Да, просто введите задачу и выберите категорию, а затем отфильтруйте ее.

Eliška Doležalová 19.12.2020 12:52
Поведение ключевого слова "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) для оценки ваших знаний,...
3
3
124
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Что-то вроде этого должно работать.

let taskForm = document.tasks;
taskForm.onsubmit = e => {
  e.preventDefault();
  let taskData = new FormData(taskForm);
  let category = taskData.get("category");
  
  let result = document.querySelector(".tasks");
  let task = document.createElement('div');
  let filterTask = document.querySelector('input[name = "filter"]:checked');
  task.appendChild(document.createTextNode(taskData.get("task")));
  task.dataset.group = category;
  task.classList.add("task");
  task.style.display = ["all", category].includes(filterTask.value) ? "block" : "none"; 
  result.appendChild(task);
}

let showTasks = document.getElementsByName("filter");
showTasks.forEach(el => {
  el.addEventListener("click", e => {
    tasks = document.querySelectorAll(".task");
    tasks.forEach(task => {
      task.style.display = ["all", task.dataset.group].includes(e.target.value) ? "block" : "none";
    });
  });
});
input[type = "radio"] {
  opacity: 0;
  position: fixed;
  width: 0;
}

input[type = "radio"] ~ label {
  display: inline-block;
  background-color: #ddd;
  padding: 5px 20px;
  font-family: sans-serif, Arial;
  font-size: 16px;
  border: 2px solid #444;
  border-radius: 4px;
}

input[type = "radio"] ~ label:hover {
  background-color: #dfd;
}

input[type = "radio"]:checked + label {
  background-color: #bfb;
  border-color: #4c4;
}
<div>
  <form name = "tasks">
    <label for = "name">Assigned Task</label>
    <input name = "task" type = "text" required />

    <label for = "category">Category</label>
    <select name = "category">
      <option value = "school" selected>School</option>
      <option value = "work">Work</option>
    </select>

    <input type = "submit" value = "Add" />
  </form>

  <h3>Task To</h3>

  <input name = "filter" id = "all" type = "radio" value = "all" checked />
  <label for = "all">All</label>

  <input name = "filter" id = "school" type = "radio" value = "school" />
  <label for = "school">School</label>

  <input name = "filter" id = "work" type = "radio" value = "work" />
  <label for = "work">Work</label>

  <h2>Tasks</h2>
  <div class = "tasks"></div>
</div>

Вы можете стилизовать добавленные задачи, используя их селектор .task в CSS.

Обратите внимание: если вы хотите анимировать при отображении и скрытии своих задач, вместо изменения свойства отображения подумайте об игре со свойствами opacity и visibility.

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