【问题标题】:Javascript function call with Thymeleaf使用 Thymeleaf 调用 Javascript 函数
【发布时间】:2023-03-27 21:00:01
【问题描述】:

我需要在 thymeleaf 模板上调用一个 javascript 函数,如下所示:

案例一:

<select th:onclick="${'function1('a')'}">

但在这种情况下,百里香不起作用..一些研究前(包括stackoverflow)我得到以下“解决方案”:

案例2:

<select th:onclick="${'function1(''a'')'}">

案例3:

<select th:onclick="${'function1(\'a\')'}">

案例4:

<select th:onclick="${'function1(\''+'a'+'\')'}">

但在所有情况下,我都会收到相同的错误:“...异常评估 SpringEL 表达式...”

我的问题是关于 javascript 调用,我需要在 js 函数中添加一些参数 ${var} 来调用。我该如何解决?

谢谢

【问题讨论】:

    标签: jquery spring thymeleaf


    【解决方案1】:

    如果您在 JS 函数调用中不需要任何动态变量,可以这样做:

    th:onclick="'alert(\'a\');'"
    

    这只是对单引号进行了转义,并且不需要 SpringEL(当然,在这种情况下您可以省去 thymeleaf 属性,而只需使用普通的 onclick)。

    要在其中插入变量:

    th:onclick="'alert(\'' + ${myVar} + '\');'"
    

    使用警报功能让我尝试并证明它有效。希望对您有所帮助。

    【讨论】:

    • 谢谢,这个概念对我有用,我确实使用过:th:attr="onchange='javascript:addAttr(\''+${poi.id}+'\', this.value )'"
    【解决方案2】:

    您需要调用下面提到的javascript函数。

    th:onclick="'javascript:function1(\''+ ${a} +'\');'"
    

    我认为这对你有帮助。

    【讨论】:

    • 如果函数内部有两个值如何发送?
    【解决方案3】:

    试试这个。

    th:onclick="${'javascript:functionXXX(' + obj.id + ')'}"
    

    【讨论】:

      【解决方案4】:

      据我所知,你有两种可能:

      1. 使用双括号

        <body th:onload="showToast([[${toast}]])">
        ...
        </body>
        

      然后JS函数是这样的

      function showToast(toast) {
          M.toast({html: toast});
      }
      
      1. 使用数据属性

        <body th:data-toast="${toast}" th:onload="showToast()">
        ...
        </body>
        

      以及相应的JS函数

      function showToast() {
          var toast = document.querySelectorAll('body')[0].getAttribute('data-toast');
          M.toast({html: toast});
      }
      

      【讨论】:

        【解决方案5】:

        html5 的另一种“新”方式,使用数据属性:

        th:data-url="@{/yourUrl}" th:onclick="window.location.href=this.getAttribute('data-url')"
        

        【讨论】:

          【解决方案6】:

          一种方法是使用字符[[' y ']]

          例如,我将显示变量“startDate”的内容,它是一个日期类型,格式为dd/MM/yyyy HH:mm:ss',以使用“警报”功能显示。

          <input type="button" th:onclick="alert([[${#dates.format(processInstance.startDate, 'dd/MM/yyyy HH:mm:ss')}]]);" />
          

          输出是这样的:

          22/02/2019 15:43:02
          

          【讨论】:

            【解决方案7】:

            我是这样做的:

            <td><a href="#" th:onclick="@{'deletetag(' + ${tag.id} + ');'}"><i class="nav-icon fas fa-trash"></i></a></td>
            

            还有一个简单的&lt;script&gt;&lt;/script&gt;里面的deletetag函数

            【讨论】:

            • 值得点赞
            【解决方案8】:

            在JS中发送两个值:

            function openGate(IP,Port) {
               // Some operations with parameters IP and Port
            }
            
            
            <button id="open" type="button" th:onclick="'openGate(\'' +${gate.gateIp} +'\',\''+${gate.gatePort}+'\')'"  class="btn btn-warning">Open the gate</button>
            

            在 thymeleaf onclick 中,我们使用配额作为参数。 所以源页面看起来

            <button id="open" type="button" onclick="openGate('192.168.10.10','9938')"  class="btn btn-warning">Open gate</button>
            

            【讨论】:

              【解决方案9】:

              在某些情况下,我们可能更喜欢将表达式直接写入 HTML 文本。当我们的目标是将变量直接写入 javascript 函数时,它会派上用场。

              [[...]] 或 [(...)] 之间的表达式在 Thymeleaf 中被视为内联表达式,在它们内部,我们可以使用在 th:text 中也有效的任何类型的表达式。

              一个简单的例子,如果你想调用 javascript function1 来提醒'a'变量。

              <script>
              
              function function1(a){
                    alert(a);
              }
              
              </script> 

              然后在thymeleaf中你可以拨打:
              &lt;button th:onclick="javascript:function1([[${a}]]);"&gt;Send&lt;/button&gt;

              您可以在 12.1 Expression inlining 部分的 Thymeleaf 文档中找到这些信息,或者在 baeldung.com/spring-thymeleaf-css-js 有一篇包含大量有用示例的好文章。

              【讨论】:

                【解决方案10】:

                您好,我遇到了同样的问题,我遇到的问题是函数未定义,因为我的函数在 thymleaf 文件中 我用过&lt;button th:onclick="javascript:function1()"&gt;Send&lt;/button&gt; 我也使用了上面提到的解决方案,但对我不起作用 所以我将几乎所有的 JavaScript 函数都复制到了一个单独的 JS 文件中,该文件位于 &lt;project_name&gt;/src/main/resources/public/js/main.js

                然后在我的 thymleaf 文件中我像这样链接它 &lt;script type="text/javascript" th:src="@{/js/main.js}" src="../static/js/main.js"&gt;&lt;/script&gt;

                我这样调用我的函数:&lt;input type="checkbox" onclick="function1()" th:onclick="|function1()|"&gt;Show Password 而且效果很好

                【讨论】:

                  猜你喜欢
                  • 2020-01-25
                  • 2021-09-06
                  • 2019-09-07
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-11-07
                  • 2020-05-16
                  • 2010-10-03
                  • 2015-01-12
                  相关资源
                  最近更新 更多