【问题标题】:How to make $(document).ready() functions available globally?如何使 $(document).ready() 函数在全球范围内可用?
【发布时间】:2010-03-11 22:04:09
【问题描述】:

我在这里有一个有趣的问题,听起来可能很傻,但是这里有。使用 JQuery 的 ready 函数,我定义了一些函数,如下所示:

$(function(){

  var function1 = function(data){
    //do something
  }

  var function2 = function(data){
    //do something else
  }
});

出于某种原因,为了让 IE 正确呈现我正在使用的内容,必须在 $(document).ready() 函数中完成。但是,一旦我从服务器端获得数据集,我就需要触发这些函数。所以我想我会做这样的事情......

Object.Namespace.callFunction = function(data){
 function1(data);
}

...放在脚本中的 ready 函数之外,以便我可以直接调用它。

不幸的是,我知道这行不通,因为它看起来不合逻辑,我已经尝试过了!我使所有这些功能任意,因为它不关心内容,而是概念。我还尝试使用事件处理程序在获得该数据后触发该功能-无济于事!在 $(document).ready() 全局中创建函数的最佳方法是什么?

【问题讨论】:

  • 我不是 JQuery 专家,但你为什么不首先使用老式的 function function1(data) { ... } 块将函数定义为全局变量?
  • 正如其他人已经说过的,答案只是将函数定义为函数。为什么这在 IE 中不起作用? 就是问题。
  • 这些只是基本示例。我也在使用 ExtJS Slider 插件,由于某种原因,IE 将无法正确呈现它们,除非它们在 doc.ready() 中完成。

标签: javascript jquery javascript-events


【解决方案1】:

如果您要定义全局函数,则没有理由在文档中准备好它们。文档中唯一应该准备好的事情是需要等到文档准备好才能采取行动的事情。可以在文档准备好之前定义函数。

// Defining the functions in the global scope.
var function1 = function(data){
    //do something that requires the dom to be ready.
}

var function2 = function(data){
    //do something else that requires the dom to be ready.
}
$(function() {
    // Running the functions when the document is ready.
    function1();
    function2();
});

【讨论】:

  • 我不能同意更多......但不幸的是,为了在页面上适当地呈现所有内容,我需要等到准备好。在这种情况下……我不能直接调用我需要做的函数。
  • @user291928 然后定义文档外的函数 ready 并在文档就绪时调用它们。
【解决方案2】:

如果你(出于文体原因)想用你的 $(document).ready 编写内联函数,你可以这样做:

var app={}; /*Use whatever your apps name is, abbreviated (something short)*/
$(function()
{
  app.function1 = function(data) { };
  app.function2 = function(data) { };
  // now you can call all functions inside and outside this ready function with the app. prefix
  // if you also want a local reference to the function without the app. prefix, you can do:
  var function1 = app.function1 = function(data) { };
});

【讨论】:

  • 或 window.functionName(window.app.functionName 也可以)
【解决方案3】:

怎么样

  function function1(data){
    //do something
  }
  function function2(data){
    //do something else
  }

   $(function(){
      // if you need to call inside ready
      function1();
      function2();
   });

【讨论】:

  • 谢谢...我没有考虑将我的函数调用包装在就绪函数中。从代码所在的位置做起来似乎很奇怪,但这做得很好。再次感谢。
  • 这就是这样做的方法。实际上,我通常使用具有这些功能的单个全局对象作为属性,以防止污染全局命名空间,但想法相同。
  • @Plynx,我同意你的看法,这太着急了,但这是主要想法,很好的答案!
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 2021-09-07
  • 2021-06-07
  • 2016-09-30
  • 1970-01-01
  • 2017-08-03
  • 2015-12-09
相关资源
最近更新 更多