在 Thymeleaf 中使用 onClick 时如何将参数传递给 javascript 函数调用

Posted

技术标签:

【中文标题】在 Thymeleaf 中使用 onClick 时如何将参数传递给 javascript 函数调用【英文标题】:How to pass arguments to javascript function call when using onClick in Thymeleaf 【发布时间】:2019-09-07 15:07:34 【问题描述】:

我一直在从 Thymeleaf 调用我的 javascript 函数,如下所示:

th:onclick="'viewDocument(\'' + $document.docTypeLongDesc +'\');'"

但我刚刚将我的 Spring Boot 版本更新为 2.1.4 RELEASE,Thymeleaf 也随之更新。并且不再支持以前的版本。

经过进一步研究,我发现我应该能够使用

th:onclick="' viewDocument (this.getAttribute ('document.docTypeLongDesc'));'"

但是,它没有给出任何错误,但也不起作用。我已经删除了参数并且能够很好地调用该函数。所以我猜我没有以正确的方式传递论点。任何指导都会有所帮助。 TIA。

【问题讨论】:

【参考方案1】:

你应该按如下方式使用它:

th:onclick="$'viewDocument(' + document.docTypeLongDesc + ');'"

【讨论】:

【参考方案2】:

看到这个:Restricted mode: Avoid variable expressions returning strings in processors for event handlers (th:on*)。

为了正确地将 Thymeleaf 变量传递给 onclick 事件,请将变量放在 data 属性中,并使用 getAttribute() 读取它。

th:data-longDescription="$document.docTypeLongDesc" onclick="viewDocument(this.getAttribute('data-longDescription'));"

【讨论】:

我引用了相同的链接并以相同的方式使用它,但仍然出现运行时错误:org.thymeleaf.exceptions.TemplateInputException:模板解析期间发生错误(模板:“templates/th_documentsDetails.html” ) . Intellij 也将 this.getAttribute 突出显示为红色,突出显示时表示无法识别。我认为这很可能是某个地方的语法错误。 @ILRNew 你有没有注意到我不再使用th:onclick,现在它只是一个普通的onclick,因为它不再需要是一个百里香表达式。 你说得对。我没有注意到这一点。一旦我这样做了,它就像一个魅力。非常感谢您。我能问你如何了解更多关于新 Thymeleaf 的信息吗?

以上是关于在 Thymeleaf 中使用 onClick 时如何将参数传递给 javascript 函数调用的主要内容,如果未能解决你的问题,请参考以下文章

thymeleaf onclick 方法里面怎样放参数

Thymeleaf 使用时的标签

Thymeleaf onclick 将 td 值发送到 javascript 函数

使用 Thymeleaf 调用 Javascript 函数

thymeleaf:字符串拼接+输出单引号

thymeleaf js绑定多个变量参数