Как я могу разделить «задачи» из ввода на категории? С отфильтрованной галереей все в порядке, я нашел много туториалов на 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>Вы говорите о поле ввода домашнего задания? Не могли бы вы объяснить, что вы пытаетесь сделать?
Да, просто введите задачу и выберите категорию, а затем отфильтруйте ее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что-то вроде этого должно работать.
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.
Можете ли вы добавить свой текущий код JS к вопросу?