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

动态添加带日期的任务功能异常:输入日期后无法添加任务

动态添加带日期的任务功能异常:输入日期后无法添加任务

嘿,我找到你这个问题的根源啦!其实是表单的默认提交行为在搞小动作,咱们一步步说清楚:

你点击弹窗里的「Add Task」按钮时,这个按钮是type="submit"类型的,会触发表单的默认提交动作——页面会刷新!这就导致:

  • 当你只填任务名称、没填日期时,浏览器的required验证会阻止表单提交,页面不刷新,addTask()函数的效果能正常显示;
  • 当你填了日期(满足验证要求),表单就会提交,页面瞬间刷新,刚添加的任务还没来得及展示就没了,看起来像是函数没工作。

知道问题了就好办,给你两个简单的解决方案:

方案一:修改按钮类型(最直接)

把弹窗里的按钮从type="submit"改成type="button",这样它就只会触发addTask()函数,不会提交表单:

<button type="button" id="addTask-btn2" onclick="addTask()">Add Task</button>

方案二:阻止表单默认提交(更严谨,还能优化体验)

如果想保留表单的验证逻辑,咱们可以在addTask()里阻止默认提交行为,顺便还能加一些用户体验优化(比如清空输入框、自动关闭弹窗):

function addTask(e) {
    // 阻止表单默认提交,避免页面刷新
    e.preventDefault();
    
    var taskName = document.getElementById('taskName').value;
    var taskDate = document.getElementById('taskDate').value;
    var taskContainer = document.querySelector('.task-container');
    
    // 动态生成唯一的任务ID,避免多个任务的checkbox和label关联错误
    const taskId = `task${taskContainer.children.length + 1}`;
    // 把日期转成更友好的格式(比如从YYYY-MM-DD转成「2 December」)
    const formattedDate = new Date(taskDate).toLocaleDateString('en-US', { 
        day: 'numeric', 
        month: 'long' 
    });
    
    var task = document.createElement('div');
    task.className = 'task';
    task.innerHTML = `<input type="checkbox" id="${taskId}" name="${taskId}" value="${taskId}"><label for="${taskId}">${taskName}</label><p>${formattedDate}</p>`;

    taskContainer.appendChild(task);
    
    // 清空输入框,方便下次添加
    document.getElementById('taskName').value = '';
    document.getElementById('taskDate').value = '';
    // 自动关闭弹窗
    document.getElementsByClassName('addTaskPopUp')[0].style.display = 'none';
}

然后修改按钮的onclick,把事件传进去:

<button type="submit" id="addTask-btn2" onclick="addTask(event)">Add Task</button>

另外还有个小细节:你原来的代码里,每个新任务的checkbox id都是task2,这会导致多个任务的label和checkbox关联混乱,上面的方案二已经帮你改成动态生成唯一ID啦~

备注:内容来源于stack exchange,提问作者Imran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:10:29