【问题标题】:passing an object in javascript function on onclick event在 onclick 事件上传递 javascript 函数中的对象
【发布时间】:2012-01-22 05:19:22
【问题描述】:

我正在尝试将一个对象传递给一个 javascript 函数,该函数应在单击链接时触发。但不幸的是,我无法让它工作。

这是我的 jsp 文件中的代码:

<script type="text/javascript">
    $(document).ready(function() {
        function tryToDoItTwice(obj) {
            var check = obj;
            if(check == null) {
                return true;
            }
            else {
                alert("You're not allowed to do this twice!");
                return false;
            }
        }
    });
</script>

<a href="<c:url value="/somepath" />" onclick="javascript: tryToDoItTwice(${foo});">Try to do it twice</a>

这里foo 指的是Foo 类型的对象。

有人可以帮我理解我在这里做错了什么吗?

编辑Foo 是一个 java 对象。而${foo} 是一个引用变量,引用了Foo java 对象。

谢谢。

【问题讨论】:

  • 我会说在 JQuery 之前学习 Javascript。什么是 ${foo} 从未见过这样的语法。
  • 另外,不需要将javascript 放在 onclick 属性中。并且,给我们错误信息。
  • 我需要澄清一下.. 该函数永远不会被调用对吗?
  • @Itay:它是对 Foo 类型对象的引用。它在jsp页面上使用的表达语言。我将这个对象从一个控制器传递到这个 jsp 页面。
  • $ is not defined 在不包含 jquery.js 时未定义。

标签: javascript jquery jsp jstl


【解决方案1】:

您的 check 变量在本地作用于该函数,因此每次调用该函数时都会重新声明它(下次单击时不会存储您的值。

您需要扩展变量的范围。

 var check = null;
  $(document).ready(function() {
        function tryToDoItTwice(obj) {
            check = obj;
            if(check == null) {
                return true;
            }
            else {
                alert("You're not allowed to do this twice!");
                return false;
            }
        }
});

另外,如果foo 存在于其他地方,您可能只想像这样传递它:

&lt;a href="&lt;c:url value="/somepath" /&gt;" onclick="javascript: tryToDoItTwice(foo);"&gt;Try to do it twice&lt;/a&gt;

【讨论】:

  • 不要以函数名为准。我认为他从服务器端而不是客户端获得点击次数..
【解决方案2】:

您不能将 JAVA 对象直接传递给 javascript。您需要以 JSON 形式返回(查找 GSON 或 Jackson 以将对象转换为 JSON)或将变量(而不是对象)传递给函数。

【讨论】:

  • 糟糕,我想我应该在问题中明确提到这一点。谢谢。
猜你喜欢
  • 2016-12-21
  • 2017-03-04
  • 2011-03-30
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多