如果我将它们放在 document.ready() 函数中,函数就会显示为未定义:
$(document).ready(function(){
function foo()
{
alert('Bar');
}
});
foo(); // Undefined
为什么会发生这种情况?我确定我只需要一些简单的理解:)
如果我将它们放在 document.ready() 函数中,函数就会显示为未定义:
$(document).ready(function(){
function foo()
{
alert('Bar');
}
});
foo(); // Undefined
为什么会发生这种情况?我确定我只需要一些简单的理解:)
不确定为什么在范围内定义函数ready()
对您很重要,但是您可以通过预先声明foo
来使其工作:
<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script>
var foo; // Here's the difference
$(document).ready(function(){
foo = function ()
{
alert('Bar');
}
});
</script></head><body>
<input type="button" onclick="foo()" value="Click me">
</body></html>
显然您不能foo()
在之后立即从内联脚本调用,ready()
因为ready()
代码尚未运行,但您可以稍后调用该函数。
只要确保foo()
在ready()
代码运行之前没有任何东西可以尝试调用(或进行foo()
无害函数的初始声明)。
您可以,但必须在ready()
方法的范围内调用它们,否则在ready()
方法退出时它们会失去作用域。
例如,下面的代码将起作用:
$(document).ready(function(){
function foo()
{
alert('Bar');
}
foo(); // still in the scope of the ready method
});
如果您将它们放在任何不属于它们的范围内,它们将显示为未定义。如果你真的想在 $(document).ready(...) 的范围之外使用它们,那么你需要在外部声明它们。如:
var foo;
$(document).ready(function(){
foo = function()
{
alert('Bar');
}
});
foo(); // works now because it is in scope
希望这可以帮助。
您的函数是在$(document).ready()
回调范围内定义的,从外部无法看到。要么在调用范围之外定义函数,要么只从内部调用它。$(document).ready()
只是另一个补充:
在函数内部声明函数或变量$(document).ready()
时onclick()
,在文档中使用绑定时这些是不可访问的。
您可以将声明移到 之外$(document).ready()
,也可以$('#element').on('click', function() {})
在`$(document).ready() 内使用。