由于 $(document).ready,Jquery 函数无法正常工作

Posted

技术标签:

【中文标题】由于 $(document).ready,Jquery 函数无法正常工作【英文标题】:Jquery function is not working due to $(document).ready 【发布时间】:2017-03-26 12:49:57 【问题描述】:

我们有两个 js fie,test-1.js,test-2.js。

<script type="text/javascript" src="test-2.js"></script>
<script type="text/javascript" src="test-1.js"></script>

在 test-1.js 中的代码是

$(document).ready(function ()
     function test_alert()  alert("hiii");  
        );

在 test-2.js 中

 $(document).ready(function ()
    function test_alert_2()
          test_alert();
          alert("helloo");
        

      );

但是 test_alert() 在 test-2.js 中不起作用。如何解决这个问题?为什么这不起作用?

为了解决这个问题,我重新安排了

<script type="text/javascript" src="test-1.js"></script>
<script type="text/javascript" src="test-2.js"></script>

现在也不行了。我无法删除 document.ready()

所以我需要一个不删除 document.ready() 的解决方案

请帮忙。

【问题讨论】:

test_alert() 工作了吗? 是的。它正在工作 【参考方案1】:

test-2.js 之前调用 test-1.js

示例

<script type="text/javascript" src="test-1.js"></script>
<script type="text/javascript" src="test-2.js"></script>

【讨论】:

不要在 $(document).ready(function() ) 中创建函数;在它之外创建函数,如果你想运行函数,那么 $(document).ready(function () test_alert(); );【参考方案2】:

如果你想在test-2.js 中使用来自test-1.js 的代码,你必须先加载test-1.js。 JavaScript 按顺序执行同步代码。因此,如果该代码尚未执行,则您无法从其他范围(例如文件)访问代码。

【讨论】:

您已经更改了文件的代码,所以这技术上现在是一个不同的问题...【参考方案3】:

添加第二个答案是因为您将顺序更改为正确,但随后也更改了脚本的内容。由于它们都包含您创建函数的$(document).ready(function() ...);,这意味着您创建的函数仅存在于该函数的范围内,例如

function foo()  
  return 1;


$(document).ready(function() 
  // this is a new scope, functions created here will not be accessible outside of it.
  function bar() 
    return 2;
  
);

foo(); // 1
bar(); // Error: undefined is not a function
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

【参考方案4】:

这里您有两个 JavaScript 文件,并且您正在使用 test-2.js 文件中的一个函数,该函数存在于 test-1.js 文件中。您的 test_alert 函数不起作用,因为您在 js 文件完全加载之前调用了该函数,由于文件加载延迟,您的 test_alert() 无法正常工作。

现在,您可以使用 window.setTimeout() 来解决这个问题。 喜欢:-

$(document).ready(function ()
    function test_alert_2()
        window.setTimeout(function()
            test_alert();
            alert("helloo");   
        ,1000);

    

);

通过此代码,将在脚本加载一秒后调用 test_alert()。 我觉得这会对你有所帮助。

【讨论】:

以上是关于由于 $(document).ready,Jquery 函数无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

jquery基础

jQuery FancyBox Iframe - 在fancybox 中使用$(document).ready?

Jquery 验证不适用于 Document.ready()

window.onload和$(document).ready(function(){})的区别

如何使用jQuery触发tap事件

jQuery fullCalendar删除document.ready上的旧事件