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(){简写,以便让您更轻松。