我已经使用SO已有一段时间了,并且找到了解决我大多数问题的方法,但是现在我对所找到的答案之一有疑问。
(原始帖子:Thymeleaf: clickable row)
第二个答案为我的问题提供了强大的解决方案,但我真的很想了解它的工作方式和原因。
<tr th:each="item : ${itmes}" th:onclick="'javascript:rowClicked(\'' + ${item.someField} + '\');'"> ... <td>Some data</td> ... </tr>
这里的\''
和'\'
字符是什么?没有它们,为什么参数传递不起作用?我事先尝试了谷歌搜索,但没有发现任何特别有用的方法,但这可能是因为我没有提出正确的问题。
感谢您的帮助。
答案 0 :(得分:0)
我发现报价过多。需要足够的引号,所以您最终会得到
th:onclick="'javascript:rowClicked('someString');"
实际上,您可以放下javascript:
标签,而只需
th:onclick="'rowClicked(\'' + ${item.someField} + '\');"
这是假设我们在您的示例中看不到的一些引号。
我会亲自为item.somefield设置数据属性,并拥有
th:onclick="rowClicked(this);"
和rowClicked中有
function rowClicked(row) {
var val = row.getAttribute("data-item");
答案 1 :(得分:0)
关键是要生成一个像这样的字符串:
rowClicked('somefield');
它是由三个与+
运算符串联在一起的字符串构成的:
'rowClicked(\''
${item.someField}
'\');'
第一部分和最后一部分是用单引号'
括起来的字符串,但是由于您需要在输出中使用单引号,因此添加了\'
(代表转义的单引号),因此第一个字符串是rowClicked('
,最后一个');
。之后,所有内容都串联在一起:rowClicked('somefield');
我认为有些替代方案更易于阅读。例如,您可以改用literal substitution,它看起来像这样:
th:onclick="|rowClicked('${item.someField}');|"