Javascript 为什么调用document.ready()中声明的函数时没有定义?
以下是我的HTML/JavaScript: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
<!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)我同意你的建议,但是如果你考虑这个问题的话,我的答案仍然是正确的。你可以通过将全局范围变量指向它们来从私有范围内公开事物,但是你仍然不能访问它们。它不是“抱歉帮不了你”。回答,这是关于范围规则的教育。相关问题在这里。