如何从外部调用 $(document).ready 中的函数

Posted

技术标签:

【中文标题】如何从外部调用 $(document).ready 中的函数【英文标题】:How to call a function within $(document).ready from outside it 【发布时间】:2011-01-23 16:26:46 【问题描述】:

如何从 $(document).ready() 外部调用函数 lol() 例如:

$(document).ready(function()  
  function lol()  
    alert('lol');  
    
);  

试过了:

$(document).ready(function()
  lol();
);

简单地说:

lol();

它必须在外部 javascript 中调用,例如:

function dostuff(url)
  lol(); // call the function lol() thats inside the $(document).ready()

【问题讨论】:

【参考方案1】:

在定义函数的块之外,它超出了范围,您将无法调用它。

但是没有必要在那里定义函数。为什么不简单:

function lol() 
  alert("lol");


$(function() 
  lol(); //works
);

function dostuff(url) 
  lol(); // also works

可以像这样全局定义函数:

$(function() 
  lol = function() 
     alert("lol");
  ;
);
$(function() 
  lol();
);

这可行,但不推荐。如果你要在全局命名空间中定义一些东西,你应该使用第一种方法。

【讨论】:

我认为在第二个示例中尝试定义全局函数时,为避免歧义,您可以使用:window['lol'] = function() /* body of the function */ ; verrrrrrrrrrrry gooooooooooooooood this【参考方案2】:

短版:你不能,它超出了范围。像这样定义您的方法,使其可用:

function lol() 
  alert('lol'); 
 

$(function()
  lol();
);

【讨论】:

【参考方案3】:

在窗口对象上定义函数,使其在另一个函数范围内成为全局函数:

$(document).ready(function()  
  window.lol = function()  
    alert('lol');  
    
);

【讨论】:

这是一个很棒的解决方案,节省了我几个小时! 在我找到的所有令人困惑或复杂的答案中,这是唯一对我有用的东西。【参考方案4】:

如果使用 jQuery 安装 Prototype 并且我们为 jQuery 设置了 noconflicts 会怎样?

jQuery(document).ready(function($)  
     window.lol = function()  
          $.('#funnyThat').html("LOL");
       
);

现在我们可以从任何地方调用 lol,但我们是否引入了与 Prototype 的冲突?

【讨论】:

【参考方案5】:

你不需要而且——如果一个函数是在 Document.Ready 之外定义的——但你想调用它 Document.Ready——你就是这样做的——这些答案把我引向了错误的方向,不要再次输入函数,只需输入函数的名称即可。

      $(document).ready(function () 
     fnGetContent();
      );

fnGetContent 在这里:

       function fnGetContent(keyword) 
            var NewKeyword = keyword.tag;
            var type = keyword.type;
            $.ajax( .......

【讨论】:

这是在回答实际问题的反面,但没有被否决,因为它对那些寻求它的人来说仍然有些帮助。 我投了反对票,因为它没有回答问题

以上是关于如何从外部调用 $(document).ready 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

jquery代码如何写到外部js中 为啥 在外部js中 写上 $(document).ready(function();就报错

如何让vuejs中ready函数加载完之后执行某个函数

从 JQuery.load ajax 调用添加到 DOM 的 document.ready 事件的预期行为是啥?

使 document.ready 考虑来自外部 iframe 的元素

如何从外部 php jquery 加载内容

$(document).ready(function () 无法调用控制器中的函数