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

如何避免表单插入对象值后在HTML中重复渲染?

问题分析与解决

错误原因

你每次点击提交按钮时,都会通过recipes.forEach遍历整个数组,为数组里的每一条数据重新创建DOM元素并添加到容器中。比如第一次添加1条数据,容器里新增1个元素;第二次添加后数组有2条数据,遍历会执行2次,这就会把第一条数据对应的元素再重复添加一遍,最终导致内容反复插入。

修复后的代码

let recipes = [];
const addRecipe = e => {
    e.preventDefault();
    const recipeTitleInput = document.getElementById('recipe-title');
    let recipe = {
        title: recipeTitleInput.value
    };
    recipes.push(recipe);
    document.querySelector('form').reset();
    
    // 只渲染刚新增的这条数据
    const recipeContainer = document.querySelector('.recipes-container');
    const recipeTitle = document.createElement('div');
    recipeTitle.classList.add('recipe-title');
    recipeTitle.textContent = recipe.title;
    recipeContainer.append(recipeTitle);
    
    console.log(recipes);
};

document.getElementById('send-recipe-btn').addEventListener('click', addRecipe);

关键修改点

  • 移除了遍历整个数组的forEach循环,改为直接处理刚创建的recipe对象,只新增当前提交的内容对应的DOM元素
  • 提前获取输入框元素,避免重复查询DOM(可选优化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:48:19