我有两个不同的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()
也是如此。 这是这种情况,还是其他问题呢?
当我去查看页面源时,我看到了两个脚本块和两个函数。这告诉我服务器端正在生成/呈现所有内容,但也许我的方法本质上是错误的(定义不同脚本标记内的函数)。提前谢谢。
答案 0 :(得分:5)
所有这些都是全球性的。他们可以看到对方。问题是当他们被定义并相互呼叫时。
您应该按此顺序定义和调用它们:
答案 1 :(得分: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();
});
答案 2 :(得分:0)
在JavaScript中定义范围的唯一内容是函数,因此您的问题不是范围问题。你最有可能不是调用foo(),你在定义blah()之前调用它,或者你在某处有语法错误。也许您可以发布整个HTML页面,以便我们可以看到正在发生的事情。