6

我有两个不同的 JSP,Java 后端将它们连接在一起并发送回同一个呈现的 HTML 页面。

每个 JSP 都有自己的<script>块并在该块内定义函数:

JSP #1:

<script type="text/javascript">
    function blah() { ... }
</script>

JSP #2

<script type="text/javascript">
    function foo()
    {
        blah();
    }
</script>

就像我说的,后端将这些添加到 HTTP 响应中,并在同一个请求期间将它们发送回浏览器。

当我在浏览器中运行此页面时,我可以立即知道在被调用blah()时没有执行。foo()我在 Firebug 中看到一个控制台错误,说明blah()未定义。我想知道是否blah()只有它自己的<script>标签内有范围,同样适用于foo(). 是这里的情况,还是有其他问题?

当我查看页面源代码时,我看到了两个脚本块和两个函数。这告诉我一切都在服务器端正确生成/呈现,但也许我的方法本质上是错误的(在不同的脚本标签中定义函数)。提前致谢。

4

3 回答 3

5

它们都是全球性的。他们可以看到对方。问题是当他们被定义并互相调用时。

您应该按以下顺序定义和调用它们:

  1. 酒吧
  2. 打电话给 foo
    • foo 执行并调用 bar
    • 酒吧被执行
于 2012-04-23T23:21:16.640 回答
1

你可以这样调用函数:

  (function($) {

     var namespace;
         namespace = {
                     something : function() {
                                             alert('hello there!');
                                            },
                      bodyInfo : function() {
                                             alert($('body').attr('id'));
                                            }
                     };
         window.ns = namespace;
    })(this.jQuery);

   $(function() {
              ns.something();
              ns.bodyInfo();
   });
于 2013-08-02T07:52:47.293 回答
0

在 JavaScript 中唯一定义作用域的是一个函数,所以你的问题不是作用域问题。您很可能没有调用 foo(),而是在定义 blah() 之前调用它,或者在某处出现语法错误。也许您可以发布您的整个 HTML 页面,以便我们了解发生了什么。

于 2012-04-23T23:22:19.110 回答