Javascript 为什么调用document.ready()中声明的函数时没有定义?

Javascript 为什么调用document.ready()中声明的函数时没有定义?,javascript,jquery,methods,undefined,Javascript,Jquery,Methods,Undefined,以下是我的HTML/JavaScript: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" con

以下是我的HTML/JavaScript:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
    <script type="text/javascript" src="/script/jquery.js"></script>
    <script type="text/javascript">
        $(function(){
            var $str = "hello world";

            function foo() {
                alert($str);
            }
        });
    </script>
</head>
<body>
    <form name="statusUpdateForm" method="post">
        <input type="button" name="submitButton" value=" " onclick="foo();" />
    </form>
</body>
</html>

无标题文件
$(函数(){
var$str=“你好世界”;
函数foo(){
警报($str);
}
});

当我点击按钮时,我得到一个JavaScript错误,指出没有定义foo。如何调用document.ready()中声明的JavaScript函数?

不可以,它是该作用域的私有函数。

基本上是将函数的作用域放在另一个函数中

想象一下:

<script>
  document.onload = function(){
    function foo(){
      alert('bar');
    }
  };
  foo();
</script>

document.onload=函数(){
函数foo(){
警报(“条”);
}
};
foo();
这是你试图实现的目标的复制品。就像函数中定义的变量在函数之外是不受限制的一样,函数名具有相同的特性

旁注JavaScript不需要变量名上的$prefix(尽管就名称而言是可以接受的)。我不知道你是否来自PHP,只是习惯了还是意识到了

我想我会回答我的评论。

试试这个:

$(function() {
    window.foo = function () {
        alert('bar');
    }
});

基本上,您需要将函数公开到全局范围。

我最终要做的——我首先应该做的——是为提交按钮添加一个单击处理程序:

$("input[name='submitButton']").click(function(){...});

$(function()函数中声明的变量和方法只能在该函数中访问

window.functionName = functionName;

也可以,您只需要将函数复制到范围之外。如果您执行类似的操作。foo=foo,或window['foo']=foo,或类似的操作,代码将正常工作。这通常也是您想要的。尽管我建议您使用
$('input[type=button]')。单击(foo)我同意你的建议,但是如果你考虑这个问题的话,我的答案仍然是正确的。你可以通过将全局范围变量指向它们来从私有范围内公开事物,但是你仍然不能访问它们。它不是“抱歉帮不了你”。回答,这是关于范围规则的教育。相关问题在这里。