【问题标题】:Thymeleaf/JavaScript ParametersThymeleaf/JavaScript 参数
【发布时间】:2019-05-09 05:16:25
【问题描述】:

我使用 SO 已经有一段时间了,并找到了解决我大部分问题的方法,但现在我有一个关于我找到的答案的问题。
(原帖:Thymeleaf: clickable row)

第二个答案为我的问题提供了一个强大的解决方案,但我真的很想了解它的工作原理和原因。

<tr th:each="item : ${itmes}" 
     th:onclick="'javascript:rowClicked(\'' + ${item.someField} + '\');'">
    ...
    <td>Some data</td>
    ...
</tr>

这里的\'' 和'\' 字符是干什么用的?为什么没有它们参数传递不起作用?我事先尝试了谷歌搜索,但没有发现任何特别有用的东西,但这也可能是因为我没有问正确的问题。

感谢您的帮助。

【问题讨论】:

    标签: javascript html thymeleaf


    【解决方案1】:

    重点是生成这样的字符串:

    rowClicked('somefield');
    

    它由三个用+ 运算符连接在一起的字符串构成:

    'rowClicked(\''
    
    ${item.someField}
    
    '\');'
    

    第一部分和最后一部分是用单引号 ' 括起来的字符串,但是由于您需要在输出中使用单引号,因此添加了 \'(表示转义的单引号)——所以第一个字符串是rowClicked(' 和最后一个');。之后,所有内容都连接在一起:rowClicked('somefield');

    有一些我认为更容易阅读的替代方案。例如,您可以改用literal substitution,它看起来像这样:

    th:onclick="|rowClicked('${item.someField}');|"
    

    【讨论】:

    • 谢谢。这就是我想知道的。
    【解决方案2】:

    我发现引用太多了。需要足够的引号,所以你最终会得到 ​​p>

    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");
    

    【讨论】:

    • 我认为我可以删除 javascript 标签,但如果我删除 \ ,我将无法传递模型属性。更多上下文:该表基本上显示了所有员工,老板可以使用弹出模式(语义 UI)更改他们的薪水,并预填充 ID 和薪水的输入字段我使用 JavaScript。我也试过“rowClicked(this);”但它没有工作并引发解析错误。
    • 如果你能做到th data-item="${item.someField}",那么你应该甚至不能在行上点击onclick,而是使用DOM addEventListener添加它
    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2020-01-25
    • 2023-03-19
    • 1970-01-01
    • 2018-12-18
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多