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

在Codepen编写JS表单事件处理程序时遇Bad path错误求助

解决表单提交时「bad path /boomboom/v2/index.html」错误并实现待办项添加功能

我帮你排查了下问题,你遇到的「bad path」错误和功能失效主要来自两个地方:浏览器的表单默认提交行为,以及不太规范的元素ID命名。下面给你详细的解决步骤和修正后的代码:

错误原因分析

  • 表单默认提交行为:当你点击<input type="submit">按钮时,浏览器会默认触发表单的提交动作,尝试跳转到表单action属性指定的地址(如果没设置action,就会刷新当前页面)。在Codepen的平台环境下,这种默认跳转会触发内部的路径错误,也就是你看到的「bad path /boomboom/v2/index.html」提示。
  • 不规范的元素ID:你的输入框ID是todo-Week 5: To Do Listinput,包含空格和特殊字符,虽然浏览器勉强能识别,但不符合HTML规范,可能导致获取元素时出现意外问题。

解决方案

1. 阻止表单默认提交行为

推荐监听表单的submit事件,而不是按钮的click事件,这样既能处理按钮点击,也能处理回车提交的情况,同时在事件处理函数中调用event.preventDefault()来阻止默认跳转。

2. 修正元素ID命名

把输入框的ID改成简洁、符合规范的名称,比如todo-input,避免空格和特殊字符。

修正后的完整代码

HTML

<div class="card"> 
  <div class="card-body"> 
    <h3 class="card-title">Today's To Do List</h3> 
    <form id="todo-form">
      Week 5: To Do List 
      <div class="form-group"> 
        <input type="text" class="form-control" id="todo-input" placeholder="What else do you need to do?"> 
      </div> 
      <div class="form-group"> 
        <input type="submit" id="todo-btn" class="btn btn-secondary btn-block" value="Add Item To List"> 
      </div> 
    </form> 
  </div> 
  <ul class="list-group list-group-flush" id="todo-ul"> 
    <li class="list-group-item">Pick up groceries <i class="fas fa-trash-alt"></i> </li> 
    <li class="list-group-item">Finish essay <i class="fas fa-trash-alt"></i> </li> 
    <li class="list-group-item">Soccer @ 5:00 <i class="fas fa-trash-alt"></i> </li>
  </ul>
</div>

CSS

body { 
  background-color: #34495e; 
  font-family: 'Lato', sans-serif; 
} 
button { 
  margin: 0 auto; 
  float: right; 
} 
.centered { 
  margin: 0 auto; 
  width: 80% 
} 
.card { 
  margin: 50px auto; 
  width: 18rem; 
} 
i{ 
  float:right; 
  padding-top:5px 
}

JavaScript

(function(){ 
  // 监听表单的submit事件,而不是按钮的click事件
  const todoForm = document.querySelector("#todo-form");
  todoForm.addEventListener('submit', addNewTodo);

  function addNewTodo(event) { 
    // 阻止表单默认提交行为
    event.preventDefault();
    
    // 获取输入框的值(使用修正后的ID)
    const newTask = document.getElementById("todo-input").value;
    
    // 空值判断,避免添加空项
    if (!newTask.trim()) return;
    
    // 创建新的列表项
    const newItem = document.createElement('li');
    newItem.className = 'list-group-item'; // 加上和现有项一致的样式类
    const newItemContent = document.createTextNode(newTask);
    // 添加删除图标
    const trashIcon = document.createElement('i');
    trashIcon.className = 'fas fa-trash-alt';
    newItem.appendChild(newItemContent);
    newItem.appendChild(trashIcon);
    
    // 添加到列表中
    document.getElementById("todo-ul").appendChild(newItem);
    
    // 清空输入框
    document.getElementById("todo-input").value = '';
  } 
})();

额外优化点

我还在JS代码里加了两个小优化:

  • 空值判断:避免用户提交空的待办项
  • 给新创建的列表项加上和现有项一致的样式类,同时添加删除图标,保持视觉统一
  • 提交后清空输入框,提升用户体验

这样修改后,你点击按钮或者按回车提交时,就能正常添加待办项,不会再触发「bad path」错误了。

内容的提问来源于stack exchange,提问作者Raquel Ocasio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:23:01