
在 html 模板中使用模板语法(如 template toolkit)动态设置元素的 `name` 属性时,必须将插值表达式用英文双引号包裹,否则浏览器无法识别该属性值,导致 javascript 无法通过 `[name="xxx"]` 准确选取元素。
你提供的代码片段中,关键问题在于
这会导致最终生成的 HTML 类似于:
浏览器会把 name=[% field %] 当作一个无值或非法属性处理(实际等效于 name 布尔属性),因此 $( "[name='updatedt']" ) 完全匹配不到任何元素。
✅ 正确写法是为 name 属性值添加双引号,确保模板引擎输出的是合法、可被 CSS 选择器识别的 HTML:
立即学习“前端免费学习笔记(深入)”;
[% FOREACH field IN ['id','type','updatedt','lastcheckdt'] %]
- [% order.$field %]
[% END %]渲染后将得到标准 HTML:
此时,JavaScript 可正常操作:
// ✅ 成功获取并更新
let dt_formatted = convertDateFormat("[% order.updatedt %]");
$("[name='updatedt']").text(dt_formatted); // 注意:dd 元素用 .text() 而非 .val()⚠️ 注意事项:
- dd 是语义化描述列表项,不支持 value 属性,因此应使用 .text() 或 .html() 更新内容,而非 .val()(.val() 仅适用于表单控件如 input/select/textarea);
- 若需后续通过 name 批量操作,建议统一添加 data-field 属性作为更语义化的替代方案;
- 在调试时,可通过浏览器开发者工具「Elements」面板查看实际渲染出的 HTML,确认 name 属性是否已正确输出。
总结:模板变量插入 HTML 属性值时,引号不是可选项,而是必需项——它决定了属性能否被正确解析与选择。











