【问题标题】:How to pass Object as parameter to java script function on onClick如何将对象作为参数传递给onClick上的javascript函数
【发布时间】:2013-09-20 18:13:21
【问题描述】:

我的主要目标: 当我单击链接时,应打开一个新窗口并在该窗口中显示整个日志文件的内容,并且该窗口不应有地址栏和导航按钮(后退、前进)。

还有其他方法可以实现我的目标吗?

这是我想要做的,我试图通过传递日志文件的 url 来调用 java 脚本方法,并考虑实现代码以打开新窗口

<table id="serverLogsStats" class="serverLogsView">
   <c:forEach var="log" items="${logsList}" varStatus="i" >
      <tr>
        <td>${log.name}</td>            
        <td><a href="#" onclick="openLog('${log}');">Open log</a></td>        
      </tr>
   </c:forEach>
</table>


<script>
function openLog (log) {
    var abc = log.name;
    alert(abc);    
}
</script>

当我将对象“日志”传递给 openLog 函数时,该值作为字符串传递。我希望将日志作为对象传递。

我的输出是未定义的。

如果我输入 'alert(log);'它正在打印对象的地址

【问题讨论】:

  • 不,JSP 是服务器端组件。 Javascript是客户端。另外,javascript 如何理解 Java 对象?
  • javasctipt 无法作为对象传递,你更好的猜测失败了。
  • 您是否尝试过将 java 对象分配给 javascript 对象并在 js 中循环遍历该对象?
  • 有没有其他方法可以解决这个问题:我的主要目标是当我点击链接时,应该打开一个新窗口并在该窗口中显示日志文件。
  • 你的意思是你的日志文件的内容?

标签: java javascript jquery spring-mvc


【解决方案1】:

这应该可行:

<table id="serverLogsStats" class="serverLogsView">
   <c:forEach var="log" items="${logsList}" varStatus="i" >
      <tr>
        <td>${log.name}</td>            
        <td><a href="#" onclick="openLog('${log.name}');">Open log</a></td>        
      </tr>
   </c:forEach>
</table>


<script>
function openLog(logName) {
    alert(logName);    
}
</script>

不能使用java对象直接作为JS对象使用,只能传递原语。

对于您的用例,您可以让 URL 服务器端将日志名称作为参数并显示其内容。

【讨论】:

  • 这是有效的,但我想传递路径而不是名称。当我传递路径时,输出字符串在路径中没有“/”。例如,如果我通过“c:\abcd\edfg”,则 java 脚本方法将其显示为“C:abcd edfg”。它不适用于“C:\\abcd\\defg”
  • 你需要转义,但是在你的 url 中使用带有“c:\”的路径很糟糕,真的很糟糕(如果有人更改 url 以显示敏感内容怎么办)
  • 你是对的,但我只是在这里举了一个例子。这不应该是实时的情况......
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 2021-04-15
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
相关资源
最近更新 更多