为什么我不能在jQuery的document.ready()中定义函数?
如果我把它们放在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>
显然你不能在ready()
之后立即从内联脚本调用foo()
,因为ready()
代码还没有运行,但是你可以稍后调用这个函数。
只要确保在ready()
代码运行之前没有任何东西可以尝试调用foo()
(或者使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()
callback的范围内定义的,不能从外部 看到 。 可以在$(document).ready()
范围之外定义函数,它只能从内部调用它。
<script> $(document).ready(function(){ myfnc = function (param1, param2) { alert('Hello'); } myfnc(); }); </script> <input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me">
另一个补充:
在$(document).ready()
函数内部声明函数或variables时,在$(document).ready()
使用onclick()
绑定时,这些函数是不可访问的。
你可以把你的声明移动到$(document).ready()
,或者你可以在$(document).ready()
中使用$('#element').on('click', function() {})
)。