在 html 模板中使用模板语法(如 template toolkit)动态设置元素的 `name` 属性时,必须将插值表达式用英文双引号包裹,否则浏览器无法识别该属性值,导致 javascript 无法通过 `[name="xxx"]` 准确选取元素。
你提供的代码片段中,关键问题在于
这会导致最终生成的 HTML 类似于:
浏览器会把 name
=[% field %] 当作一个无值或非法属性处理(实际等效于 name 布尔属性),因此 $( "[name='updatedt']" ) 完全匹配不到任何元素。
✅ 正确写法是为 name 属性值添加双引号,确保模板引擎输出的是合法、可被 CSS 选择器识别的 HTML:
[% FOREACH field IN ['id','type','updatedt','lastcheckdt'] %]
渲染后将得到标准 HTML:
此时,JavaScript 可正常操作:
// ✅ 成功获取并更新
let dt_formatted = convertDateFormat("[% order.updatedt %]");
$("[name='updatedt']").text(dt_formatted); // 注意:dd 元素用 .text() 而非 .val()⚠️ 注意事项:
总结:模板变量插入 HTML 属性值时,引号不是可选项,而是必需项——它决定了属性能否被正确解析与选择。