You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过输入将任务按类别划分?适配现有JavaScript筛选功能

如何通过输入添加可分类的任务并适配现有筛选功能

我来帮你搞定这个问题!你已经实现了任务筛选的核心逻辑,现在只需要添加表单提交的处理代码,让用户输入的任务能被现有筛选系统识别并展示。

第一步:补充任务容器

首先你需要一个专门存放任务的容器,在HTML的<h2>TASK TO</h2>下方添加这个容器:

<div id="taskContainer"></div>

所有新创建的任务都会被插入到这个容器里,方便筛选逻辑统一识别。

第二步:添加表单提交处理逻辑

把这段JavaScript代码加到你现有脚本的末尾,用来处理用户添加任务的操作:

// 监听表单提交事件
document.getElementById("FORM").addEventListener("submit", function(e) {
  // 阻止表单默认跳转行为
  e.preventDefault();
  
  // 获取用户输入的任务内容和选中的分类
  const taskContent = document.getElementById("homework").value.trim();
  const selectedCategory = document.getElementById("category").value.toLowerCase();
  
  // 简单验证输入合法性
  if (!taskContent || !selectedCategory) {
    alert("请填写任务内容并选择分类!");
    return;
  }
  
  // 创建新的任务元素
  const newTask = document.createElement("div");
  // 给任务元素添加筛选所需的类名:基础类filterDiv + 分类类名 + 默认显示的show类
  newTask.className = `filterDiv ${selectedCategory} show`;
  // 设置任务的显示文本
  newTask.textContent = taskContent;
  
  // 将新任务添加到容器中
  document.getElementById("taskContainer").appendChild(newTask);
  
  // 重置表单,方便用户继续添加
  this.reset();
});

关键细节修正

注意你原来的函数名存在不匹配的问题:filterSelection里调用的是w3RemoveClass和w3AddClass,但你定义的函数是removeClass和addClass,这会导致筛选功能失效。我已经在完整代码里统一了函数名:

// 修正后的添加类函数
function w3AddClass(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 w3RemoveClass(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(" ");
}

完整整合后的代码

<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="taskContainer"></div>
<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>

<script>
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 w3AddClass(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 w3RemoveClass(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";
 });
}

// 表单提交处理逻辑
document.getElementById("FORM").addEventListener("submit", function(e) {
  e.preventDefault();
  
  const taskContent = document.getElementById("homework").value.trim();
  const selectedCategory = document.getElementById("category").value.toLowerCase();
  
  if (!taskContent || !selectedCategory) {
    alert("请填写任务内容并选择分类!");
    return;
  }
  
  const newTask = document.createElement("div");
  newTask.className = `filterDiv ${selectedCategory} show`;
  newTask.textContent = taskContent;
  
  document.getElementById("taskContainer").appendChild(newTask);
  
  this.reset();
});
</script>

现在你点击"Add"按钮就能添加新任务,并且这些任务可以通过顶部的筛选按钮正常按类别过滤啦!

内容的提问来源于stack exchange,提问作者Eliška Doležalová

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:06:47