为什么在调用document.ready()时未定义声明的函数
Why is a function declared in document.ready() not defined when called?
这是我的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>
当我点击按钮时,我会得到一个JavaScript错误,指出foo没有定义。如何调用document.ready()中声明的JavaScript函数??
基本上将函数的作用域放在另一个函数中。
图片如下:
<script>
document.onload = function(){
function foo(){
alert('bar');
}
};
foo();
</script>
这是你努力实现的目标的翻版。就像函数中定义的变量在函数之外是禁止的一样,函数名称也具有相同的特性。
旁注JavaScript不需要在变量名上使用$prefix(尽管就名称而言是可以接受的)。我不知道你是不是来自PHP,只是习惯了还是意识到了。
我想把我的评论作为一个答案
试试这个:
$(function() {
window.foo = function () {
alert('bar');
}
});
基本上,您需要将函数公开到全局范围。
在$(function)函数中声明的变量和方法只能在其中访问。如果你需要在外部使用这些,你可以在像这样的全局命名空间中使用
window.functionName = functionName;
不能,它对该范围是私有的。
我最终要做的是为提交按钮添加一个点击处理程序:
$("input[name='submitButton']").click(function(){...});
相关文章:
- 在setInterval函数之前声明时未定义对象
- 我们可以在初始化variable Angular JS时将变量值声明为未定义吗
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- 函数声明未定义-原因
- DOJO 引用错误:未定义声明
- 如何区分未声明和未定义的 JavaScript 对象属性
- 为什么JS类内部声明的变量是“未定义的”
- "无法读取属性'id'未定义的“;解析工厂中声明的数组时
- 属性初始值设定项在声明之前未定义
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- 为什么来自.getJSON的名称在声明为列表(JavaScript / JQuery)的索引后仍未定义
- 声明后立即未定义的变量
- 从外部文件在打字稿中声明变量得到引用错误:..未定义
- ng-model 在声明$parent后保持未定义状态
- 如何避免 jshint 说 const 在声明之前在函数中被引用时是未定义的
- 数组中声明对象的函数未定义--NO!不是
- 为什么在使用返回的RequireJS函数中声明的Click绑定时未定义
- 在单个模块中声明时未定义控制器
- 在inspect元素中声明变量时未定义
- 为什么在调用document.ready()时未定义声明的函数