Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 完成一个项目会在其自身的函数中添加两行新内容_Javascript_List - Fatal编程技术网

Javascript 完成一个项目会在其自身的函数中添加两行新内容

Javascript 完成一个项目会在其自身的函数中添加两行新内容,javascript,list,Javascript,List,在我看了一个教程之后,我自己重新创建了一个待办事项列表,而且一切都很好,至少99%都是这样。只有一个小问题,没有什么破坏交易,但它困扰了我很多,因为我无法在函数中找到问题的根源,尽管我已经使用调试器缩小了问题的范围。问题本身是,每当我在待办事项列表中将一个项目标记为“已完成”时,它都会向其添加两行新的空行(就像有人按字面上的Enter x2,这就是它在控制台日志中的显示方式)。问题发生在“每个项目”上,所以它不像我将一个项目标记为已完成,它会在每个项目上添加两行新行,而只是在标记/未标记的项目上

在我看了一个教程之后,我自己重新创建了一个待办事项列表,而且一切都很好,至少99%都是这样。只有一个小问题,没有什么破坏交易,但它困扰了我很多,因为我无法在函数中找到问题的根源,尽管我已经使用调试器缩小了问题的范围。问题本身是,每当我在待办事项列表中将一个项目标记为“已完成”时,它都会向其添加两行新的空行(就像有人按字面上的Enter x2,这就是它在控制台日志中的显示方式)。问题发生在“每个项目”上,所以它不像我将一个项目标记为已完成,它会在每个项目上添加两行新行,而只是在标记/未标记的项目上。下面是一段代码,其中包含我应该将其缩小到的函数:

function completeItem(){
    const item = this.parentNode.parentNode;
    const parent = item.parentNode;
    const id = parent.id;
    const value = item.innerText;

    if(id === "todo"){
        data.todo.splice(data.todo.indexOf(value), 1)
        data.completed.push(value);

        // Notification.
        notification.innerHTML = "<p>Task completed.</p>";
        notification.classList.add("notification");
        notification.classList.add("notificationCompleted");
        setTimeout(() => {
            notification.classList.remove("notification");
            notification.classList.remove("notificationCompleted");
            notification.innerHTML = "";
        }, 2000);
    } else {
        data.completed.splice(data.completed.indexOf(value), 1);
        data.todo.push(value);
    }
    dataObjectUpdate();
    console.log(data);

    const target = (id === "todo") ? document.getElementById("completed"):document.getElementById("todo");

    parent.removeChild(item);
    target.insertBefore(item, target.childNodes[0]);
}
函数completeItem(){
const item=this.parentNode.parentNode;
const parent=item.parentNode;
const id=parent.id;
常量值=item.innerText;
如果(id==“待办事项”){
data.todo.splice(data.todo.indexOf(值),1)
数据。完成。推送(值);
//通知。
notification.innerHTML=“任务已完成。

”; 通知.classList.add(“通知”); notification.classList.add(“notificationCompleted”); 设置超时(()=>{ 通知.classList.remove(“通知”); notification.classList.remove(“notificationCompleted”); notification.innerHTML=“”; }, 2000); }否则{ 数据.已完成.拼接(数据.已完成.索引OF(值),1); data.todo.push(值); } dataObjectUpdate(); 控制台日志(数据); 常量目标=(id==“todo”)?document.getElementById(“已完成”):document.getElementById(“todo”); 父母。远程子女(项目); target.insertBefore(item,target.childNodes[0]); }
如果需要,这里还有到hastebin上整个脚本文件的链接: . 下面是一个代码笔的链接,展示了该问题: 提前谢谢

textContent返回所有元素的文本内容,而innerText 返回所有元素的内容,除了
元素

如果您使用文本内容,错误将被修复

更换

const value = item.innerText;


是否有一些HTML与此一起使用?不多,只有无序列表,这些项目将存储在其中。其中90%是由用户输入动态创建的。当然,你还没有给我们那个HTML,所以我们必须自己重新创建它——这会耽误我们回答你的时间。我的错,这是hastebin上的HTML:不要在链接中发布问题的基本信息,把它放在你的问题中,它本身就起作用了!谢谢。顺便说一句,在Mozzila开发者版中,它与innerText配合得很好,只有在Chrome中才有这个问题。但是现在有了textContent,它就可以正常工作了。再次感谢:)
const value = item.textContent;