javascript函数在jquery $(document).ready块中不起作用
我试图从onclick
触发器调用JavaScript
函数。
HTML
部分:
first button
和JavaScript
代码
$(document).ready(function(){ function my_func(){ alert("this is an alert"); } });
这是行不通的。
但是如果我将JavaScript
函数保留在$(document).ready()
代码之外,它就可以工作了。 以下是相关的代码段:
$(document).ready(function(){ function my_func111(){ alert("this is an alert"); } }); function my_func(){ alert("this is an alert"); }
1)为什么第一个JavaScript
代码段不起作用?
2)如何让第一个JavaScript
代码段工作?
编辑:
因为我知道,当网页完全加载时,会执行$(document).ready()
。 那么如果我在$(document).ready()
之外编写my_func()
,如何在完成页面加载之前或之后阻止my_func()
激活?
这都是关于javascript执行上下文和范围的。
您在函数中定义的所有内容仅在此函数中知道。
在第一次测试中,函数my_func()
只能在ready回调(以及内部其他对象)中使用。 你不能在外面引用它。
在第二个示例中,函数my_func()
对文档是全局的,可以从任何地方访问。
我认识到这可能是一个简单的简单解释:-)
如果在回调中定义函数,则只能在此回调中使用它:
$(document).ready(function(){ function something(){ alert('test'); } //.. something(); // Will work } something(); // Won't work
您的第一个代码段不起作用,因为在函数中my_func111
是在$(document).ready
调用中作为参数传递的匿名函数的本地范围内定义的。
您可以通过将函数定义放到文档范围并在ready函数中调用它来修复代码,例如:
function my_func(){ alert("this is an alert"); } $(document).ready(function(){ my_func(); });
我认为“它不起作用”,你的意思是它说“my_func未定义”或类似?
在函数中定义函数时,内部函数在外部函数之外是不可见的(除非它是外部函数的return语句的一部分)。
您需要了解闭包,这里有一个很好的教程。
您将添加一个全局变量isReady
。 $(document).ready
回调部分会将其更改为true
。
您的函数和isReady
变量都必须在$(document).ready
的回调之外定义,以便可以从回调范围之外看到它们。
您的HTML代码无需更改。 – 我更改了名称以使用JS和HTML约定,但基本上它与您最初编写的内容相同…
first button
我作为旁注:新的JQuery使用$(function(){
作为$(document).ready(function(){
简写,以便让您更轻松。