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

使用Thymeleaf的th:onclick调用JS函数时出现未定义引用错误

解决Thymeleaf th:onclick调用JS函数报错问题

问题分析与修复方案

1. 函数名拼写不匹配

你报错提示getMenuResults未定义,但代码里的函数名是getMenu、th:onclick调用的也是getMenu。先排查实际代码中是否存在函数名拼写错误,比如是否误将getMenu写成getMenuResults,或者调用时写错了函数名。

2. Thymeleaf表达式语法错误

th:onclick中嵌入变量的写法不符合Thymeleaf规范,正确写法有两种:

  • 用单引号包裹字符串类型变量(数字类型可省略):
th:onclick="getMenu('[[${menu.dictId}]]')"
  • 使用Thymeleaf的|字符串拼接语法:
th:onclick="|getMenu(${menu.dictId})|"

错误写法会导致Thymeleaf无法正确渲染变量,进而引发JS语法错误。

3. JS函数作用域问题

确保<script>标签放在</body>之前(页面底部),这样DOM元素渲染时函数已被定义。如果必须放在<head>中,需用DOM加载事件包裹函数:

document.addEventListener('DOMContentLoaded', function() {
  window.getMenu = function(menuId) {
    console.log(menuId);
  }
});

避免因DOM元素先于函数加载完成,导致调用时函数未定义。

4. 排查函数覆盖或解析错误

在浏览器控制台直接输入getMenu回车,检查是否能找到该函数。如果找不到,排查页面中是否有同名函数覆盖,或JS代码存在语法错误导致函数未被正确解析。

修复后的完整示例代码

<div>
  <a
    th:each="menu : ${menus}"
    th:onclick="|getMenu(${menu.dictId})|"
    th:text="${menu.dictName}"
  ></a>
</div>

<script>
  function getMenu(menuId) {
    console.log(menuId);
  }
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:37:41