EJS中forEach循环首个元素未生成form标签问题求助
EJS循环生成表单首个元素丢失form标签的问题解决
问题核心
用EJS的forEach遍历数组生成表单时,首个元素的<form>标签不渲染,仅显示内部内容,导致按钮无法提交,后续元素正常。
可能原因及对应解法
1. 全局变量污染导致循环异常
内部奖杯循环里的i未声明为局部变量,变成全局变量后干扰外层循环逻辑:
// 原代码(问题点) <%for(i=0; i<chain.streak; i++){%>
修复: 用let声明局部变量i,避免全局污染:
<%for(let i=0; i<chain.streak; i++){%> <i class="fa-solid fa-trophy"></i> <%}%>
2. 重复ID触发浏览器渲染异常
所有表单用同一个id="chain-display",违反HTML唯一ID规范,可能导致浏览器跳过首个表单的标签解析:
修复: 结合循环索引生成唯一ID:
<form id="chain-display-<%=index%>" action="/chainDisplay" method="POST">
3. 页面其他位置存在未闭合标签
如果页面其他区域有未闭合的HTML标签(比如之前的<div>、<form>没收尾),浏览器会自动修正DOM结构,可能吃掉首个表单的标签。
修复: 检查并补全页面所有未闭合的标签。
4. 验证数据源与渲染结果
- 后端打印
userChains数组,确认首个元素的chainName、streak等字段正常; - 浏览器查看页面源代码,确认首个元素的
<form>标签是真的没渲染,还是被浏览器DOM修正隐藏了。
内容的提问来源于stack exchange,提问作者UmutE
相关产品推荐
相关产品推荐

